簡體   English   中英

在Java中使用正則表達式從字符串中提取信息

[英]Using Regular Expression in Java to extract information from a String

我有一個這樣的輸入String

"I am Duc/N Ta/N Van/N" 

字符串"/N"表示它是一個人的名字。
預期的輸出是:

名稱:德塔范

我該如何使用正則表達式呢?

這是用於捕獲每個以“ /N ”開頭的“名稱”的正則表達式

(\w+)\/N

使用Regex101驗證

現在,您只需要在該String每個匹配項上循環並連接即可獲得結果:

String pattern = "(\\w+)\\/N";
String test = "I am Duc/N Ta/N Van/N";
Matcher m = Pattern.compile(pattern).matcher(test);

StringBuilder sbNames = new StringBuilder(); 
while(m.find()){
    sbNames.append(m.group(1)).append(" ");
}
System.out.println(sbNames.toString());

德塔范

它給了您最難的部分。 我讓您根據自己的需要進行調整。

注意 :
在Java中,不需要轉義正斜杠,但是要在整個答案中使用相同的正則表達式,我將保留"(\\\\w+)\\\\/N" ,但是"(\\\\w+)/N"將也可以

您可以像這樣使用Pattern和Matcher:

String input = "I am Duc/N Ta/N Van/N";
Pattern pattern = Pattern.compile("([^\\s]+)/N");
Matcher matcher = pattern.matcher(input);
String result = "";
while (matcher.find()) {
    result+= matcher.group(1) + " ";
}

System.out.println("Name: " + result.trim());

輸出量

Name: Duc Ta Van

使用Java 9+的另一種解決方案

在Java9 +中,您可以使用Matcher::results這樣的Matcher::results

String input = "I am Duc/N Ta/N Van/N";
String regex = "([^\\s]+)/N";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
String result = matcher.results().map(s -> s.group(1)).collect(Collectors.joining(" "));

System.out.println("Name: " + result); // Name: Duc Ta Van

我已經使用“ [/ N] +”作為正則表達式。

正則表達式101

[] =匹配集合中的字符

\\/ =匹配字符/按字面值(區分大小寫)

+ =匹配一次到無限次,並盡可能多地匹配,並根據需要返回(貪婪)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM