0

私の正規表現の問題を助けてください

これが私の文字列です

source="http://www.amazon.com/ref=s9_hps_bw_g200_t2?pf_rd_m=ATVPDKIKX0DER&pf_rd_i=3421"
source_resource="pf_rd_m=ATVPDKIKX0DER"

source_resource、[たとえば] でsource終わる場合があり&ます。.

ここのところ、

regex = re.compile("pf_rd_m=ATVPDKIKX0DER+[&.]")
regex.findall(source)
[u'pf_rd_m=ATVPDKIKX0DER&']

こちらのテキストを使用させていただきました。source_resourceテキストを使用するのではなく、変数を使用して、&または.これを見つけるにはどうすればよいですか。

4

3 に答える 3

3

目標が値を抽出することである場合pf_rd_m(明らかに使用しているようですregex.findall)、ここで正規表現が最も簡単な解決策であるかどうかはわかりません:

>>> import urlparse
>>> qs = urlparse.urlparse(source).query
>>> urlparse.parse_qs(qs)
{'pf_rd_m': ['ATVPDKIKX0DER'], 'pf_rd_i': ['3421']}
>>> urlparse.parse_qs(qs)['pf_rd_m']
['ATVPDKIKX0DER']
于 2013-06-12T07:59:40.960 に答える
2

また、エスケープする必要があります.

pattern=re.compile(source_resource + '[&\.]')
于 2013-06-12T07:58:48.997 に答える
1

Python で利用可能なすべての文字列フォーマット オプションを利用して、通常の文字列のように正規表現の文字列を構築することができます。

import re
source_and="http://rads.stackoverflow.com/amzn/click/B0030DI8NA/pf_rd_m=ATVPDKIKX0DER&"
source_dot="http://rads.stackoverflow.com/amzn/click/B0030DI8NA/pf_rd_m=ATVPDKIKX0DER."
source_resource="pf_rd_m=ATVPDKIKX0DER"
regex_string = source_resource + "[&\.]"
regex = re.compile(regex_string)
print regex.findall(source_and)
print regex.findall(source_dot)
>>> ['pf_rd_m=ATVPDKIKX0DER&']
['pf_rd_m=ATVPDKIKX0DER.']

これがあなたの言いたいことだと思います。

正規表現を変更したことに注意してください: the.は特別な記号であり、エスケープする必要があります+(文字列は 1 回しか出現しないため、+ の使用は不要です)。

于 2013-06-12T07:59:28.563 に答える