[英]Regex words between commas
我有以下類型的句子要過濾:
波蘭、瑞典、美國的公民需要一些東西
波蘭公民需要一些東西
美國公民需要一些東西
我想分開國家名稱,然后保存它們。 我為此構建了以下正則表達式機制。
String sentence;
[...]
Pattern pattern = Pattern.compile("(?:Citizens of )? ([A-Z][a-z]+\\s*[A-Z]*[a-z]*) require");
Matcher matcher = pattern.matcher(sentence);
while (matcher.find())
System.out.println(matcher.group(1));
它適用於 3 個案例中的 2 個;
Citizens of Poland require something
Citizens of United States require something
如果有多個單詞,我如何構建一個正則表達式模式來獲取單詞?
您可以在 Jave 中使用\G
和前瞻來嘗試這個正則表達式:
(?:^Citizens of|(?!^)\G,) ([A-Z][a-z]+(?: [A-Z][a-z]+)*)(?=[a-zA-Z, ]*? require something$)
正則表達式詳細信息:
(?:
啟動非捕獲組
^Citizens of
Match 文本Citizens of
at the start|
或者(?,^)\G,
\G
斷言 position 在前一個匹配的結尾或第一個匹配的字符串的開頭。 我們在上一個國家名稱匹配之后匹配一個逗號)
結束非捕獲組
匹配一個空格(
開始捕獲組[AZ][az]+
匹配一個大寫單詞(?:
啟動非捕獲組
[AZ][az]+
匹配空格后跟首字母大寫的單詞)*
結束非捕獲組。 *
表示匹配該組的 0 個或多個)
結束非捕獲組(?=
開始前瞻條件
[a-zA-Z, ]*? require something$
require something
[a-zA-Z, ]*? require something$
在匹配文本之前斷言我們有 0 個或多個字母、逗號或空格)
結束前瞻
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.