簡體   English   中英

逗號之間的正則表達式單詞

[英]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 個;

  1. Citizens of Poland require something
  2. 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.

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