将多个条件应用于捕获组

问题描述 投票:1回答:1

我需要从文本中提取符合这两个要求的所有单词:

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

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

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

至于要求#1,我tried在这里使用正向前瞻:

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

甚至可以将其他条件应用于捕获组吗?我可以在我的应用程序代码中处理它,但我真的更喜欢将所有这些要求放在一个正则表达式中。

regex regex-group
1个回答
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 - 一个单词边界。
© www.soinside.com 2019 - 2024. All rights reserved.