我正在寻找在python中搜索一行中的大写单词的逻辑,就像我有一个* .txt:
aaa
adadad
DDD_AAA
Dasdf Daa
我想只搜索彼此有2个或更多大写单词的行(在上面的例子DDD_AAA
中)。
答案 0 :(得分: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
基本上看看正则表达式!
答案 1 :(得分:0)
正则表达式是要走的路:
import re
pattern = "([A-Z]+_[A-Z]+)" # matches CAPITALS_CAPITALS only
match = re.search(pattern, text)
if match: print match.group(0)
你必须弄明白你究竟想要的是什么。
答案 2 :(得分:0)
假设您对“大写字母”的定义是一个由两个或更多个大写字母(非数字)字符组成的字符串,即 [A-Z]
,并假设将一个“资本”区分开来单词“来自另一个不是完全互补的集合([^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]|$)
答案 3 :(得分:0)
你走了:
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