[英]How to print substring using RegEx in Python?
這是兩個文本:
1) 'provider:sipoutilp1.ym.ms'
2) 'provider:sipoutqtm.ym.ms'
我想打印ilp
時達到的拳頭線和qtm
當到達第二行。
這是我的解決方案,但不起作用。
RE_PROVIDER = re.compile(r'(?P<provider>\((ilp+|qtm+)')
或在下面的行中,
182938,DOMINICAN REPUBLIC-MOBILE
對DOMINICAN REPUBLIC
,我可以使用相同的方法re.compile
嗎?
感謝您的任何幫助。
您的正則表達式不正確,因為您的關鍵字前面有一個括號,因為您的行中沒有這樣的字符。
作為更通用的方法,您可以在sipout
或provider:sipout
之后捕獲字母字符。
>>> s1 = 'provider:sipoutilp1.ym.ms'
>>> s2 = 'provider:sipoutqtm.ym.ms'
>>> RE_PROVIDER = re.compile(r'(?P<provider>(?<=sipout)(ilp|qtm))')
>>> RE_PROVIDER.search(s1).groupdict()
{'provider': 'ilp'}
>>> RE_PROVIDER.search(s2).groupdict()
{'provider': 'qtm'}
(?<=sipout)
是一個正 (?<=sipout)
,這將使regex引擎與sipout
前面的模式匹配。
編輯后:
如果要匹配具有不同結構的多個字符串,則必須使用可選的前置模式來匹配關鍵字,並且由於這一點,您不能在后視中使用未固定長度的模式,因此不能將其用於此目的。 因此,您可以使用捕獲組技巧。
您可以在無捕獲組中定義可選的先前模式,並在捕獲組中定義關鍵字,然后在匹配之后獲取第二個匹配group(1)
, group(0)
是您的整個匹配項)。
>>> RE_PROVIDER = re.compile(r'(?:sipout|\d+,)(?P<provider>(ilp|qtm|[A-Z\s]+))')
>>> RE_PROVIDER.search(s1).groupdict()
{'provider': 'ilp'}
>>> RE_PROVIDER.search(s2).groupdict()
{'provider': 'qtm'}
>>> s3 = "182938,DOMINICAN REPUBLIC-MOBILE"
>>> RE_PROVIDER.search(s3).groupdict()
{'provider': 'DOMINICAN REPUBLIC'}
請注意 , gorupdict
在這種情況下不起作用,因為它將返回
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.