2011-08-23 10 views
0

私はこのような文字列がある場合:Regexを使用して単純な文字列をマッチングしますか?

*select 65* description 

私はアスタリスクとPythonで正規表現を使用して番号の後にビットを抽出可能性がどのように?上記の文字列からselect65が得られるものが必要です。

それらのすべては、この規則に従ってください:あなたは、この正規表現を使用でき

*[lowercase specifier] [integer]* description 

答えて

4

:Pythonで

^\*([a-z]+)\s+([0-9]+)\* 

を、あなたはthe re moduleで正規表現を一致させることができます。このように:あなたがしたい一致の数に応じて、

import re 

my_string = """*select 65* description""" 
match = re.match(r"^\*([a-z]+)\s+([0-9]+)\*", my_string) 
specifier = match.group(1) 
integer = int(match.group(2)) 
+1

注意を)を "小文字の指定子"と "整数"セクションの間に挿入します。一致が厳密でなければならない場合は、 '\ s +'部分を置き換えて実空間文字を入れます。 –

1
import re 

、その後

m = re.match(r"^\*([a-z]+)\s+([0-9]+)\*\s+(.*)", "*select 65* description") 
print m.groups() 

または

r = re.compile(r"^\*([a-z]+)\s+([0-9]+)\*\s+(.*)") 
m = r.match("*select 65* description") 
print m.groups() 

のいずれか。正規表現は複数回の実行に適した形式でコンパイルされているため、前者は1つまたは複数の一致に適しています。

+0

ああ、申し訳ありませんが、あまりにも。 icktoofayが書いたように、あなたが説明に興味がないので、使用する正規表現は 'r \^*([a-z] +)\ s +([0-9] +)\ *" 'となります。 – glglgl

1

Pythonの正規表現ライブラリは強力ですが、私は軽量の問題のためのスプリット()を使用しての個人的に好きだ:指定した正規表現は、1つまたは複数の空白文字(スペース、タブと一致することを

>>> s = "*select 65* description" 
>>> s.split('*') 
['', 'select 65', ' description'] 
>>> s.split('*')[1].split() 
['select', '65'] 
+2

おそらく、これは "小文字の指定子"が実際に小文字であるか、または "整数"部分が実際に整数であるかを検証しないので、余分なエラーチェックを実行する必要があります。 –

+0

正規表現を使用しない場合+1。他の簡単な解決策がある場合、正規表現を使用しないでください。 – Dominik

関連する問題