2016-06-09 30 views
0

內設置的電子郵件地址的一部分,我有一個字符串:blah1 blah2 [email protected] randomblah正則表達式 - 提取「用戶名」的句子

blah1blah2不會改變。電子郵件地址和randomblah將改變。

我想使用正則表達式(Java)提取用​​戶名。我已經嘗試了很多事情與最接近的幸福

/blah2 .*(?=(@))/

這給了我blah2 username

我不能工作了如何從提取物排除blah2

+0

http://regexr.com/ – Afif

回答

0

這是紅寶石,所以這可能不完全在java中工作,但基本的想法是這樣的。

regex = /^.* (?<username>.*)@.*$/ 
result = regex.match "blah1 blah2 [email protected] randomblah" 
puts result[:username] # output is 'username' 

*注意,^.*(?<.

^表示字符串的開頭之間的空間,$表示字符串的結尾。

.*表示匹配下一個模式之前的任何字符,這是本例中的空格。
請注意,匹配這裏實際上意味着忽略他們,因爲我們正在捕獲下一個具體模式。

.*旁邊,有一個空格用於標記我們想要捕獲的特定模式的開始。

而接下來,我們將捕捉一切(.*)來的空白區域,@。我們標記爲()。我們通過在?<>內明確寫入username來命名爲username

然後,我們匹配所有事情後行結束之前。請注意,這也意味着忽略它們。

這是紅寶石,所以在Java中匹配和捕獲語法可能會有所不同,但希望基本的想法是相同的。

0

你可以做這樣的事情:

.*blah2 (\S*)@.*

看到它在Regex101

我們基本上是捕捉所有非空白字符(\S)目前在blah2@之間。

然後可以通過\1訪問捕獲的用戶名。

0

使用\s+(\w+)@。這將匹配屬於[a-zA-Z0-9_]的所有用戶名。如果您的用戶名可以包含其他特殊字符,則適當替換\w。你可以試試這個代碼,它會提取用戶名。

import java.util.regex.*; 
public class RegexTest{ 

    public static void main(String []args){ 
     String data = "blah1 blah2 [email protected] randomblah"; 
     String regex = "\\s+(\\w+)@"; 
     Pattern p = Pattern.compile(regex); 
     Matcher m = p.matcher(data); 
     if(m.find()) 
      System.out.println(m.group(1)); 
    } 
} 

輸出:用戶名

0
regexFindString = Regex("\w*@\w*.\") 

    if regexFindString.Matches(String): 

      regexFIRST = Regex("blah1 blah2 ") 

      regexSECOND = Regex("@\w+") 

       x = Regex.Replace(FIRST, "") 

       x = Regex.Replace(SECOND, "") 

我正則表達式可能會生鏽,但這個想法是: 取字符串中包含「@」或」符號後所作出的正則表達式匹配。 「/".com」。 然後使用這些精確字符(「blah1 blah2」和「@」或「。」/「。com」)創建另外兩個正則表達式。 當你得到它們時,只需用空字符串替換它們:「」並給你的用戶名(x)新的字符串值。這是你的用戶名。

0

帶有電子郵件地址正則表達式的錯誤號碼1正在糟糕地重新發明車輪並且滾動您自己的正則表達式。

regular-expressions.info有一些有用的材料,關於這一主題,包括常見的陷阱和有用的正則表達式的概括應該涵蓋你的需求:

\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,}\b.

你可以修改它用正則表達式來提取用戶名通過添加一些大括號來分組。

(\b[A-Z0-9._%+-]+)@[A-Z0-9.-]+\.[A-Z]{2,}\b.

所以使用matcher.find()通過您的字符串和matcher.group(1)比賽迭代提取用戶名。