-1

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

aaa
adadad     
DDD_AAA    
Dasdf Daa

我只想搜索彼此后面有 2 个或更多大写单词的行(在上述情况下DDD_AAA)。

4

4 回答 4

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
于 2013-03-11T16:53:11.013 回答
0

假设您对“大写单词”的定义是由两个或多个大写字母(非数字)字符组成的字符串, 对字母数字字符的补充集,,您正在寻找像这样的正则表达式[A-Z][^A-Z] [^a-zA-Z0-9]

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

我说喜欢是因为上述内容并不完全正确:\b将下划线计_为单词字符。将\bs替换为[^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]|$)

这是一个 Rubular 演示。

最后,如果你考虑一个单字符的词,一个“词”,那么就简单地{2,}去掉量词:

(?<=[^a-zA-Z0-9]|^)[A-Z]+(?=[^a-zA-Z0-9]).*(?<=[^a-zA-Z0-9])[A-Z]+(?=[^a-zA-Z0-9]|$)
于 2013-03-11T16:51:20.093 回答
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

基本上研究正则表达式!

于 2013-03-11T16:49:13.853 回答
0

正则表达式是要走的路:

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

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

于 2013-03-11T16:50:00.297 回答