java - 逗号之间的正则表达式单词
问题描述
我有以下类型的句子要过滤:
波兰、瑞典、美国的公民需要一些东西
波兰公民需要一些东西
美国公民需要一些东西
我想分开国家名称,然后保存它们。我为此构建了以下正则表达式机制。
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
Citizens of
在开头匹配文本|
或者(?!^)\G,
\G
在前一个匹配的结尾或第一个匹配的字符串的开头断言位置。我们在上一个国家名称匹配之后匹配一个逗号
)
结束非捕获组(
启动捕获组[A-Z][a-z]+
匹配一个大写单词(?:
启动非捕获组[A-Z][a-z]+
匹配空格后跟首字母大写的单词
)*
结束非捕获组。*
表示匹配该组的 0 个或多个)
结束非捕获组(?=
开始前瞻条件[a-zA-Z, ]*? require something$
在匹配文本之前断言我们有 0 个或多个字母、逗号或空格require something
)
结束前瞻
推荐阅读
- python - Python在循环中绘制数据帧的数字列,同时动态改变xtick频率
- python - 您如何获取文件名并在标签中保存和显示名称。KivyMD Kivy Python
- ruby-on-rails - Rails 6 CSV上传错误数量的参数(给定1,预期2)
- logic - 这是如何使用多项式计算 CRC-A - x^16 + x^12 + x^5 + 1
- r - 如何比较 R 上分类数据的均值
- javascript - 基于现有对象数组中的一个属性的新数组
- java - 问题 Prepopulate Room Database - Database Inspector 为空
- reactjs - recharts 折线图在响应式容器内没有响应
- html - 如何在 Angular 上平滑地为(自制)旋转木马设置动画?
- wordpress - REST Api 401 的 Nginx Wordpress 问题