2017-09-15 9 views
-1

行うPythonで良い方法があります:バックタプルとして一致する部分を取得:正規表現にマッチする部分文字列を抽出するエレガントな方法は?

  • は、文字列をチェックはイエス場合は、正規表現
  • のセットと一致します。

だから基本的に私は(例えばタプル)簡単な方法は、単純なパーサ/スキャナ文法を入力すると、単に特定の構造内のすべての一致を抽出したいだから我々は、文字列、国コードでエンコードされたとし

、市の名前とインデックス。これを抽出します:

input = "123-NEWYORK-[2]" 
grammar = "<country,[0-9]+>-<city,[A-Z]*>-[<index,[0-9]*>" 
res = HOW_TO_DO_THIS(input,grammar) 
if res is None: 
    print("Does not match") 
else 
    (countrycode,city,index) = res 
+2

チェックアウトこの1つのバディhttps://stackoverflow.com/questions/46239445/get-string-that-was-matched-by-regex/46239491より簡単に(そしてより一般的な)です#46239491 – babygame0ver

+0

're'モジュールを使う必要があります。基本的にそのモジュールのチュートリアルを尋ねるので、それが立てる質問は広すぎます。 – chepner

答えて

2

に応じて拡張することができます。

import re 
input = "123-NEWYORK-[2]" 
grammar = r"(?P<country>[0-9]+)-(?P<city>[A-Z]*)-(?P<index>\[[0-9]*\])" 
res = re.findall(grammar, input) 
if not res: 
    print("Does not match") 
else: 
    (countrycode,city,index) = res[0] 
    print(countrycode) 

変更:

  • 正しい正規表現は(?P[0-9]+)-(?P[A-Z])-(?P[[0-9]])
  • です。Pythonの正規表現モジュールの構文はre.findall(patter, input_string)です。反対ではありません。
  • if not xif x is None
0

このコードを確認してください。これは、単純なテキスト検索のためですが、正規表現が変更されていることに注意してください、あなたがすることができるのpython3であなたのシナリオ

import re 
f=open('sample.txt',"w") 
f.write("<p class = m>babygameover</p>") 
f.close() 
f=open('sample.txt','r') 
string = "<p class = m>(.+?)</p>" # regular expression 
pattern = re.compile(string) # compiling 
text = f.read() 
search = re.findall(pattern,text) # searching 
print search 
+0

これは私が探しているものではありません。 findallは1正規表現のすべての出現を見つける。私はそれよりも大きい正規表現に従って配置されたすべてのサブレクゼスを望みます(したがって、上記の場合、 - []。 – robert

+0

@robertあなたは行ごとにデータを読んでそれをループにしますあなたのもの – babygame0ver

関連する問題