繁体   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