识别含有连续大写字母的行
我想找一种逻辑,可以在Python中搜索一行里的大写字母单词,比如我有一个*.txt文件:
aaa
adadad
DDD_AAA
Dasdf Daa
我想只搜索那些有两个或更多大写字母单词连在一起的行(在上面的例子中就是DDD_AAA
)。
4 个回答
0
假设你定义的“首字母大写词”是由两个或更多大写字母(不是数字)组成的字符串,也就是 [A-Z]
。同时,假设分隔一个“首字母大写词”和另一个的不是简单的非大写字母,而是所有非字母数字的字符,也就是 [^a-zA-Z0-9]
,那么你需要找的正则表达式大概是这样的:
\b[A-Z]{2,}\b.*\b[A-Z]{2,}\b
我说“大概”是因为上面的说法并不完全正确:\b
会把下划线 _
也算作一个单词字符。你可以把 \b
替换成 [^a-zA-Z0-9]
,并用环视断言把它包起来(这样它就变成零宽度的,像 \b
一样),这样你就得到了正确的正则表达式:
(?<=[^a-zA-Z0-9]|^)[A-Z]{2,}(?=[^a-zA-Z0-9]).*(?<=[^a-zA-Z0-9])[A-Z]{2,}(?=[^a-zA-Z0-9]|$)
最后,如果你把一个字符的词也算作“词”,那么只需要去掉 {2,}
这个量词就可以了:
(?<=[^a-zA-Z0-9]|^)[A-Z]+(?=[^a-zA-Z0-9]).*(?<=[^a-zA-Z0-9])[A-Z]+(?=[^a-zA-Z0-9]|$)
0
print re.findall("[A-Z][a-zA-Z]*\s[A-Z][a-zA-Z]",search_text)
应该可以用来匹配两个都以大写字母开头的单词
针对你具体的例子
lines = []
for line in file:
if re.findall("[A-Z][a-zA-Z]*\s[A-Z][a-zA-Z]",line): lines.append(line)
print lines
基本上要看看正则表达式!
0
正则表达式是解决问题的好方法:
import re
pattern = "([A-Z]+_[A-Z]+)" # matches CAPITALS_CAPITALS only
match = re.search(pattern, text)
if match: print match.group(0)
不过,你得先弄清楚你到底在找什么。