-1

*.txt があるように、Python の行で大文字の単語を検索するロジックを探しています。

aaa
adadad     
DDD_AAA    
Dasdf Daa

大文字の単語が 2 つ以上続く行のみを検索したい (上記の場合DDD_AAA)。

4

4 に答える 4

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 に答える
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

基本的に正規表現を調べてください!

于 2013-03-11T16:49:13.853 に答える
0

「大文字の単語」の定義が 2 つ以上の大文字のアルファベット (数字以外の) 文字の文字列、つまり [A-Z]であると仮定し、ある「大文字の単語」を別の単語から分離するものは完全に補完的なセット ( [^A-Z]) ではなく、英数字の補完セット、つまり、次の ような[^a-zA-Z0-9]正規表現を探しています

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

上記が正確ではないため、好きと言います。アンダースコアを単語文字として\bカウントします。s をルックアラウンド アサーションでラップされたs に_置き換えて( のようにゼロ幅にするため)、正しい正規表現が得られます。\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]|$)

これがRubularのデモです。

最後に、「単語」という 1 文字の単語を考える場合は、単純に{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

どうぞ:

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 に答える