簡體   English   中英

如何在Python中使用RegEx打印子字符串?

[英]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嗎?

感謝您的任何幫助。

您的正則表達式不正確,因為您的關鍵字前面有一個括號,因為您的行中沒有這樣的字符。

作為更通用的方法,您可以在sipoutprovider: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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM