2013-03-11 72 views
-1

我正在寻找的是一个搜索词的资本在蟒蛇一条线,像我有一个* .TXT逻辑标识线:连续用大写字母

aaa 
adadad  
DDD_AAA  
Dasdf Daa 

我想只为搜索具有两个或更多大写单词的行(在上述情况下为DDD_AAA)。

+3

什么是你的一个字的定义是什么? – NPE 2013-03-11 16:46:39

+0

它的一个巨大的文件。我正在逐行解析。 – Ganderous 2013-03-11 16:48:01

+0

他的意思是它只有字母?字母和数字?以下划线开头?等 – 2013-03-11 16:49:52

回答

0
print re.findall("[A-Z][a-zA-Z]*\s[A-Z][a-zA-Z]",search_text) 

应努力满足2个字,这两个启动以大写字母

为您具体的例子

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

OP似乎寻找所有的CAPS,而不是以大写字母开头。 – ATOzTOA 2013-03-11 16:57:46

+0

meh ...我试图演示一些正则表达式的东西......他可以使正则表达式匹配他的“大写字” – 2013-03-11 16:59:42

0

正则表达式是要走的路:你要弄清楚究竟你正在寻找的,虽然

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

+0

的具体定义,谢谢jochem,但大写字母不知道。我需要,如果任何conscutice大写字母退出 – Ganderous 2013-03-11 17:15:13

0

意味着你的一个“资本字”的定义是两个或多个大写字母(非数字)字符的字符串,[A-Z],并假设什么隔开一个来自另一个“资本词”是不太补集([^A-Z]),而是互补集的字母数字字符,[^a-zA-Z0-9],你正在寻找一个正则表达式

\b[A-Z]{2,}\b.*\b[A-Z]{2,}\b 

我说喜欢因为上述不完全正确:\b将下划线_作为单词字符。与[^a-zA-Z0-9]小号包裹在环视断言(使他们的零宽,像\b)更换\b S,和你有正确的正则表达式:

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

Here's a Rubular demo.

最后,如果你考虑一个单字符字,一个 “字”,后来干脆废除了{2,}量词:

(?<=[^a-zA-Z0-9]|^)[A-Z]+(?=[^a-zA-Z0-9]).*(?<=[^a-zA-Z0-9])[A-Z]+(?=[^a-zA-Z0-9]|$) 
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 
+0

这个解决方案不会考虑'DDDAAAA'匹配吗? – 2013-03-11 16:58:44

+0

@ acheong87是的,谢谢... – ATOzTOA 2013-03-11 17:05:18

+0

最后回答... – ATOzTOA 2013-03-11 17:12:48