2017-07-26 3 views
0

私はPython 3.6を使用しています。私は現在、read.txtファイル内の文字列を探しています。しかし、その文字列にわずかな変更を加える方法はありますか?私は私が持っているコードであなたの例を与える:文字列へのわずかな変更re.findall python3

lines = [] # create an empty list 
str1 = "as a result, we will comply with such standard" 
with open(read.txt, 'r') as f: 
    line2 = f.read() 
    var1 = re.findall(str1, line2, re.I) # find str1 in read.txt 
    if len(var1) > 0: 
    lines.append('1') # if it exists, append a 1 to the list "lines" 
    else: 
    lines.append('0') # otherwise a 0 

私の問題は、私はまた、「re.findall」機能は同じSTR1ではなく、「意志」緊張せずに見てみたいということです。これは、str1 '= "結果として、私たちはそのような標準に準拠しています"とも見ています。どんな提案も大歓迎です!あなたは、括弧で、それはその句が0または1回存在するすべてのインスタンスを検索します{0,1}を追加「します」を入れた場合はとにかくお時間を

おかげで、

+1

本当にこれを行うには正しいツールがありますか? – styvane

+0

regexは確かにここで使用するツールではありません - 複数の定義済みパターンを使った簡単な 'in '検索は十分であり、パターンは実際には'普通 'ではないので、ここでは正規表現を使わない理由だけではありません。 – zwer

答えて

2
In [29]: str1 = "as a result, we (will){0,1}comply with such standard" 

In [30]: re.search(str1, str2) 
Out[30]: <_sre.SRE_Match object; span=(0, 46), match='as a result, we will comply with such standard'> 

In [31]: re.search(str1, str3) 
Out[31]: <_sre.SRE_Match object; span=(0, 41), match='as a result, we comply with such standard'> 

。あなたは質問タイトルにre.searchと記されていますが、コードはre.findallです。代わりに検索したいと思っています。 re.searchre.findall

違い:

In [38]: re.search(str1, str2).group() 
Out[38]: 'as a result, we will comply with such standard' 


In [38]: re.search(str1, str2).group() 
Out[38]: 'as a result, we will comply with such standard' 

In [39]: re.findall(str1, "not in this string") 
Out[39]: [] 

In [40]: re.findall(str1, str2) 
Out[40]: ['will '] 

あなたのコードがあるため、空のリストがFalseに評価する方法を同じように動作します。これを参照してください:

In [41]: bool(['will ']) 
Out[41]: True 

In [42]: bool([]) 
Out[42]: False 
+0

ここでは、アスタリスク(0回以上の繰り返し)よりも疑問符(0回または1回の繰り返し)が理にかなっています。示されているように、これは "... will will will will comp ..." – jasonharper

+0

さて、実際には{0、1}を追加することを考えました。今私は –

+0

ありがとうございます。私は実際にre.findall()を探します。タイトルを編集しました。多かれ少なかれ同じですか? – martins

関連する問題