正则表达式 - 在字符串中查找大写单词

Arg*_*gon 9 python regex

我正在尝试学习如何使用正则表达式,但有一个问题。假设我有字符串

line = 'Cow Apple think Woof`
Run Code Online (Sandbox Code Playgroud)

我想看看是否line至少有两个以大写字母开头的单词(当然,确实如此)。在 Python 中,我尝试执行以下操作

import re
test = re.search(r'(\b[A-Z]([a-z])*\b){2,}',line)
print(bool(test))
Run Code Online (Sandbox Code Playgroud)

但这会打印False. 如果我改为

test = re.search(r'(\b[A-Z]([a-z])*\b)',line)
Run Code Online (Sandbox Code Playgroud)

我发现它print(test.group(1))Cowprint(test.group(2))is w,第一个匹配项的最后一个字母(在 中没有其他元素test.group)。

关于查明这个问题和/或如何更好地解决问题的任何建议?

Syn*_*cus 8

由于内括号,匹配的最后一个字母在组中。放下那些,你会没事的。

>>> t = re.findall('([A-Z][a-z]+)', line)
>>> t
['Cow', 'Apple', 'Woof']
>>> t = re.findall('([A-Z]([a-z])+)', line)
>>> t
[('Cow', 'w'), ('Apple', 'e'), ('Woof', 'f')]
Run Code Online (Sandbox Code Playgroud)

当然,大写单词的数量是len(t)

  • 而且,这里不需要任何括号。`re.findall(r'\b[AZ][az]+\b', line)` 就是你所需要的。 (2认同)