2016-11-28 15 views
-1

私の目標は、正規表現が一致するテキストファイルから行を1行ずつ出力することです。私のファイルregexprc.txtには、すべての種類のものが書かれていますが、そのファイルの名前と一致し、それぞれの行を一行ずつ出力する単純なプログラムを書いています。Python 3:テキストファイルの名前を一致させて行単位で出力する

ルールは次のとおりです。オプションのミドルネームがすべて1つの空白で区切られた姓と名を持つ行。最初の文字はすべて大文字で、アルファベットの文字列は名前として使用できます。ジョンスミス、ジョンリースミス、AB、ABC、Abc Def Zと一致するはずです。ジョンスミス、Z、Ab Cd EE、ABC D.と一致してはいけません。

残念ながら、 Pythonの3に新しいmはここで私はこれまで試したものです:

import re 

file_read = open("regexprc.txt", "r") 
#match names 
ptr = '^([A-Z][a-z]*\s){1,2}([A-Z][a-z]*)?$' 

for line in file_read: 
    a = re.search(ptr, line) 
    print(a) 
このコードだけのように見えるいくつかのメッセージとともに None文の多くを印刷し

:もう一度、私はちょうどそれをしたい

<_sre.SRE_Match object; span=(0, 4), match='A B\n'>. 

行ごとにregexprc.txtの名前を印刷します。

+1

返す内容を確認するには、re.searchのドキュメントを読むことを強くお勧めします。 *そこにはっきりと明記されています。どんな正解もそれらのドキュメントの再ハッシュにすぎないので、これを尋ねる理由はありません。 –

+0

'a = re.search(ptr、line)'を使用して ':' // 'print(a.group())'を使用します –

+0

あなたの正規表現はあなたの基準よりも少し制限があります。あなたの正規表現は文字列 'Liam MacDonald'を受け入れるべきですか? –

答えて

0
import re 

ptr = r'your_regular_expression' 

with open('your_file_name', 'r') as file: 
    for line in file: 
     for match in re.finditer(ptr, line): 
      print(match.group()) 

これは、各行内のすべての一致を見つけ出し、それぞれの "グループ0"(つまり、一致したすべてのテキスト)を印刷します。

with文もあなたのためにファイルを閉じるので、一般的に使用することをお勧めします。

関連する問題