识别具有连续大写字母的行

时间:2013-03-11 16:43:06

标签: python regex

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

aaa
adadad     
DDD_AAA    
Dasdf Daa

我想只搜索彼此有2个或更多大写单词的行(在上面的例子DDD_AAA中)。

4 个答案:

答案 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]|$)

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]|$)

答案 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