2012-08-08 11 views
2

我得到了很多字符串在這種格式Person To Company。例如Joe To Fedex。我需要的是一個簡單的正則表達式,它可以得到這兩個不同的部分。我需要這個人和公司。正則表達式爲「到」在java

我想出了這一點:

"\\b\\s[Tt][Oo]\\s\\b" 

雖然這個心不是完全正確的,它並沒有真正幫助我實際上解析出我需要的作品。有關如何在Java中完成的任何想法?

+1

所有將要做的就是檢測一個由空白包圍的case-insentive'to'。你需要捕獲組('()')來捕獲joe/fedex文本。 – 2012-08-08 14:59:47

回答

3
Pattern regex = Pattern.compile("(\\S+)\\s+to\\s+(\\S+)", Pattern.CASE_INSENSITIVE); 
Matcher regexMatcher = regex.matcher(subjectString); 
if (regexMatcher.find()) { 
    fromstr = regexMatcher.group(1); 
    tostr = regexMatcher.group(2); 

} 

應該爲此工作。 (\S與任何非空白字符匹配。如果只想匹配字母,則可以使用\p{L})。

+0

謝謝您的回覆。所以我給了這個鏡頭。有效。但假設人和公司可以是多個詞。例如'Joe Smith到Fedex Delivery Services'。然後這不能解析它們。任何想法如何可以更新來做到這一點? – user489041 2012-08-08 15:20:21

+0

如果那真的是你的整個字符串,那麼我會用@ FranciscoPaulo的建議去。否則,我們需要更多信息如何找出名稱的開始和結束位置。 – 2012-08-08 15:23:32

+0

我想我可以將它編輯爲人物之前的所有內容,並且To之後的所有內容都是公司 – user489041 2012-08-08 15:24:32

2

分割字符串是這樣的:

String[] split = someString.split("(?i)\\s+TO\\s+") 

第一部分在分割[0],第二個在拆分[1]

0

所有你需要的是讓在匹配器組方法。

String regx = "(\\w*)\\s[Tt][Oo]\\s(\\w*)"; 
String src = "Joe To Fedex"; 
Matcher matcher = Pattern.compile(regx).matcher(src); 
while(matcher.find()){ 
    System.out.println(matcher.group(0)); 
    System.out.println(matcher.group(1)); 
    System.out.println(matcher.group(2)); 
} 
+0

可以做regx =「(\\ w *)\\ sto \\ s(\\ w *)」; ... matcher = Pattern.compile(regx,Pattern.CASE_INSENSITIVE).matcher(src);' – 2012-08-08 18:06:37