我正在寻找在 python 的一行中搜索大写单词的逻辑,就像我有一个 *.txt:
aaa
adadad
DDD_AAA
Dasdf Daa
我只想搜索彼此后面有 2 个或更多大写单词的行(在上述情况下DDD_AAA
)。
干得好:
import re
lines = open("r1.txt").readlines()
for line in lines:
if re.match(r'[^\w]*[A-Z]+[ _][A-Z]+[^\w]*', line) is not None:
print line.strip("\n")
输出:
DDD_AAA
假设您对“大写单词”的定义是由两个或多个大写字母(非数字)字符组成的字符串,即 对字母数字字符的补充集,即,您正在寻找像这样的正则表达式[A-Z]
[^A-Z]
[^a-zA-Z0-9]
\b[A-Z]{2,}\b.*\b[A-Z]{2,}\b
我说喜欢是因为上述内容并不完全正确:\b
将下划线计_
为单词字符。将\b
s替换为[^a-zA-Z0-9]
s 包裹在环视断言中(使它们的宽度为零,如\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]|$)
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
基本上研究正则表达式!
正则表达式是要走的路:
import re
pattern = "([A-Z]+_[A-Z]+)" # matches CAPITALS_CAPITALS only
match = re.search(pattern, text)
if match: print match.group(0)
你必须弄清楚你到底在寻找什么。