将多个条件应用于捕获组

时间:2019-03-27 17:27:06

标签: regex regex-group

我需要从文本中提取出符合以下两个条件的所有单词:

  1. 包含至少一个大写字母
  2. 不完全由大写字符组成。

因此,单词 WorD 是正确的捕获,但是单词 WORD 不是正确的捕获。

>

因此,我可以使用\b([a-zA-Z]+)\b正则表达式来捕获所有单词,但是我不知道如何在此处添加大写字母条件。

关于#1要求,我tried在此处使用正向前瞻,如下所示:

\b(?=.*[A-Z]+)([a-zA-Z]+)\b,但是现在如果一行中至少有一个大写字母,它将捕获一行中的所有单词。

是否甚至可以将其他条件应用于捕获组? 我可以在应用程序的代码中进行处理,但我真的更希望在单个Regex中满足所有这些要求。

1 个答案:

答案 0 :(得分:1)

您可以使用

\b(?=[A-Z]*[a-z])(?=[a-z]*[A-Z])([a-zA-Z]+)\b

请参见regex demo

实际上,您甚至不需要捕获组,([a-zA-Z]+)通常可以用[a-zA-Z]+代替,但这取决于您使用正则表达式的位置。

详细信息

  • \b-单词边界
  • (?=[A-Z]*[a-z])-正向先行,要求在0+大写字母之后使用小写字母
  • (?=[a-z]*[A-Z])-正向超前,要求0 +小写字母后必须大写字母
  • ([a-zA-Z]+)-第1组:1个或更多字母
  • \b-单词边界。