我需要从文本中提取符合这两个要求的所有单词:
- 至少包含一个大写字母
- 不要完全由大写字符组成。
因此,Word 和 WorD 是正确的捕获,但单词和 WORD 不是。
因此,我可以使用b([a-zA-Z]+)b
正则表达式捕获所有单词,但我不知道如何在此处添加大写字母条件。
至于要求#1,我试图在这里使用积极的展望,如下所示:
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
- 单词边界。