pythonの自然言語処理にて、正規表現の記述方法に困っております。
#試したこと
'[[Category:イギリス|*]]'という文字列から、'イギリス'だけを抽出しようとしています。
python
1import re 2 3text = '[[Category:イギリス|*]]' 4 5pattern1 = r'.*[Category:.*?' 6pattern2 = r'.*[Category:(.*?)' 7pattern3 = r'.*[Category:(.*?)(?:\|.*)' 8 9result1 = re.findall(pattern1, text, re.MULTILINE) 10print(result1) 11result2 = re.findall(pattern2, text, re.MULTILINE) 12print(result2) 13result3 = re.findall(pattern3, text, re.MULTILINE) 14print(result3)
#結果 ['[[Category:'] [''] ['イギリス']
##質問1
「pattern1 = r'.[Category:.?'」と「pattern2 = r'.[Category:(.?)'」は、**()**を付けだだけにもかかわらず、出力結果になぜこのような差が生まれるのでしょうか。
##質問2
(?:)
は、調べると「正規表現のキャプチャしない指定の記述である」とされています。
pattern3の例でいうと\|
以降の文字列を検索対象とするがキャプチャしないという意味だと思うのですが、結果'イギリス'
の文字列が抽出できた意味が理解できません。
##動作環境
APPLE MacBook-Pro python 3.8.5
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/24 11:39