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

时间:2017-04-15 04:06:27

标签: python regex

我试图学习如何使用正则表达式,但有一个问题。我们说我有字符串

line = 'Cow Apple think Woof`

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

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

但打印False。如果我改为

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

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

有关精确定位此问题和/或如何更好地解决问题的任何建议吗?

3 个答案:

答案 0 :(得分:2)

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

>>> 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')]

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

答案 1 :(得分:1)

我使用findall函数查找与正则表达式匹配的所有实例。使用len查看有多少匹配,在这种情况下,它打印出3。您可以检查长度是否大于2并返回TrueFalse

import re

line = 'Cow Apple think Woof'

test = re.findall(r'(\b[A-Z]([a-z])*\b)',line)
print(len(test) >= 2)

如果您只想使用正则表达式,您可以搜索大写单词,然后搜索中间的一些字符和另一个大写单词。

test = re.search(r'(\b[A-Z][a-z]*\b)(.*)(\b[A-Z][a-z]*\b)',line)
print(bool(test))
  • (\b[A-Z][a-z]*\b) - 找到大写单词
  • (.*) - 匹配0个或更多字符
  • (\b[A-Z][a-z]*\b) - 找到第二个大写字词

这种方法并不具有动态性,因为它不适用于尝试匹配3个大写单词。

答案 2 :(得分:0)

import re

sent = "His email is abc@some.com, however his wife uses xyz@gmail.com"

x = re.findall('[A-Za-z]+@[A-Za-z\.]+', sent)

print(x)

如果电子邮件ID(abc @ some,com。)末尾有句点,则会在电子邮件地址末尾将其返回。但是,这可以单独处理。