我正在寻找一个 REGEX 来查找字符串中的前一两个大写单词。如果前两个词大写,我想要前两个词。连字符应被视为单词的一部分。
Madonna has a new album
我要找 madonna
Paul Young has no new album
我要找 Paul Young
Emmerson Lake-palmer is not here
我要找 Emmerson Lake-palmer
我一直在用
^[A-Z]+.*?\b( [A-Z]+.*?\b){0,1}
这在前两个上做得很好,但对于第三个例子,我得到 Emmerson Lake
, 而不是 Emmerson Lake-palmer
.我可以使用什么 REGEX 来查找上述示例中的前一两个大写单词?
最佳答案
您可以使用
^[A-Z][-a-zA-Z]*(?:\s+[A-Z][-a-zA-Z]*)?
见 regex demo
基本上,使用字符类
[-a-zA-Z]*
而不是点匹配模式只匹配字母和连字符。详情
^
- 字符串开头 [A-Z]
- 一个大写的 ASCII 字母 [-a-zA-Z]*
- 零个或多个 ASCII 字母/连字符 (?:\s+[A-Z][-a-zA-Z]*)?
- 一个可选的(1 或 0 由于 ?
量词)序列:\s+
- 1+ 空格 [A-Z]
- 一个大写的 ASCII 字母 [-a-zA-Z]*
- 零个或多个 ASCII 字母/连字符 Unicode 感知等价物(用于支持 Unicode 属性类的正则表达式风格):
^\p{Lu}[-\p{L}]*(?:\s+\p{Lu}[-\p{L}]*)?
哪里
\p{L}
匹配任何字母和 \p{Lu}
匹配任何大写字母。
关于REGEX 查找字符串中的前一个或两个大写单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43498411/