Python 用连续的大写字母标识行

Python 用连续的大写字母标识行,python,regex,Python,Regex,我正在寻找在python中搜索一行大写单词的逻辑,就像我有一个*.txt: aaa adadad DDD_AAA Dasdf Daa 我只想搜索后面有两个或两个以上大写单词的行(在上述情况下DDD_AAA) 应该匹配以大写字母开头的两个单词 对于你的具体例子 lines = [] for line in file: if re.findall("[A-Z][a-zA-Z]*\s[A-Z][a-zA-Z]",line): lines.append(line) print

我正在寻找在python中搜索一行大写单词的逻辑,就像我有一个*.txt:

aaa
adadad     
DDD_AAA    
Dasdf Daa
我只想搜索后面有两个或两个以上大写单词的行(在上述情况下
DDD_AAA

应该匹配以大写字母开头的两个单词

对于你的具体例子

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

基本上看正则表达式

Regex是一条路要走:

import re
pattern = "([A-Z]+_[A-Z]+)" # matches CAPITALS_CAPITALS only
match = re.search(pattern, text)
if match: print match.group(0)

你必须弄清楚你到底在寻找什么。

假设你对“大写字”的定义是由两个或两个以上大写字母(非数字)字符组成的字符串,即
[a-Z]
,并假设将一个“大写字”与另一个“大写字”分开的不完全是互补集(
[^a-Z]
)而是字母数字字符的补充集,即
[^a-zA-Z0-9]
,您正在寻找类似正则表达式的

我之所以说like,是因为上面的说法并不完全正确:
\b
将下划线
\u
计算为单词字符。将
\b
s替换为
[^a-zA-Z0-9]
s,并将其包装在lookaround断言中(使其宽度为零,如
\b
),这样您就有了正确的正则表达式:

(?<=[^a-zA-Z0-9]|^)[A-Z]{2,}(?=[^a-zA-Z0-9]).*(?<=[^a-zA-Z0-9])[A-Z]{2,}(?=[^a-zA-Z0-9]|$)
给你:

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

你对一个词的定义是什么?它是一个巨大的文件。我一行一行地解析。他的意思是它只是字母吗?字母和数字?以下划线开头?etcalso DDD_AAA是一个词。。。那么,它是如何匹配2个或更多大写单词的呢?我想也许“2个或更多大写单词”应该是“…字母”?OP似乎查找所有大写字母,而不是以大写字母开头。嗯。。。我想展示一些正则表达式的东西。。。他可以做一个正则表达式来匹配他对“资本词”的具体定义,这个解决方案不会考虑<代码> DDDAAA一个匹配吗?谢谢JooCm,但是大写字母是不知道的。如果存在任何大写字母,我需要通知您
(?<=[^a-zA-Z0-9]|^)[A-Z]+(?=[^a-zA-Z0-9]).*(?<=[^a-zA-Z0-9])[A-Z]+(?=[^a-zA-Z0-9]|$)
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