[英]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.