将多个条件应用于捕获组
Apply multiple conditions to a capturing group
我需要从文本中提取所有符合这两个要求的词:
- 至少包含一个大写字母
- 不完全由大写字符组成。
所以,Word 和 WordD 是正确的捕获,但是 word 和 WORD 不是。
所以,我可以使用 \b([a-zA-Z]+)\b
正则表达式捕获所有单词,但我不知道如何在此处添加大写字母条件。
关于要求 #1,我 tried 在这里使用积极的前瞻:
\b(?=.*[A-Z]+)([a-zA-Z]+)\b
,但现在如果该行至少有一个大写字母,它会捕获该行中的所有单词。
甚至可以对捕获组应用附加条件吗?
我可以在我的应用程序代码中处理它,但我真的更愿意在一个正则表达式中满足所有这些要求。
您可以使用
\b(?=[A-Z]*[a-z])(?=[a-z]*[A-Z])([a-zA-Z]+)\b
实际上,您甚至不需要捕获组,([a-zA-Z]+)
通常可以用 [a-zA-Z]+
代替,但这取决于您使用正则表达式的位置。
详情
\b
- 单词边界
(?=[A-Z]*[a-z])
- 一个积极的前瞻,需要在 0+ 个大写字母之后有一个小写字母
(?=[a-z]*[A-Z])
- 一个积极的前瞻,需要在 0+ 个小写字母之后有一个大写字母
([a-zA-Z]+)
- 第 1 组:1 个或多个字母
\b
- 单词边界。
我需要从文本中提取所有符合这两个要求的词:
- 至少包含一个大写字母
- 不完全由大写字符组成。
所以,Word 和 WordD 是正确的捕获,但是 word 和 WORD 不是。
所以,我可以使用 \b([a-zA-Z]+)\b
正则表达式捕获所有单词,但我不知道如何在此处添加大写字母条件。
关于要求 #1,我 tried 在这里使用积极的前瞻:
\b(?=.*[A-Z]+)([a-zA-Z]+)\b
,但现在如果该行至少有一个大写字母,它会捕获该行中的所有单词。
甚至可以对捕获组应用附加条件吗? 我可以在我的应用程序代码中处理它,但我真的更愿意在一个正则表达式中满足所有这些要求。
您可以使用
\b(?=[A-Z]*[a-z])(?=[a-z]*[A-Z])([a-zA-Z]+)\b
实际上,您甚至不需要捕获组,([a-zA-Z]+)
通常可以用 [a-zA-Z]+
代替,但这取决于您使用正则表达式的位置。
详情
\b
- 单词边界(?=[A-Z]*[a-z])
- 一个积极的前瞻,需要在 0+ 个大写字母之后有一个小写字母(?=[a-z]*[A-Z])
- 一个积极的前瞻,需要在 0+ 个小写字母之后有一个大写字母([a-zA-Z]+)
- 第 1 组:1 个或多个字母\b
- 单词边界。