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

2024-03-29 15:59:01 发布

您现在位置: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?你知道吗

谢谢你的帮助。你知道吗


Tags: 文本re解决方案providermscompileilpym
1条回答
网友
1楼 · 发布于 2024-03-29 15:59:01

正则表达式不正确,因为关键字前面有一个开括号,因为行中没有这样的字符。你知道吗

作为一种更通用的方法,您可以捕获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)是一个positive look-behind,它将使正则表达式引擎与sipout前面的模式匹配。你知道吗

编辑后:

如果要匹配多个具有不同结构的字符串,则必须使用可选的前置模式来匹配关键字,并且由于不能在look behind中使用长度不固定的模式,因此不能将其用于此目的。因此,你可以使用一个捕获组技巧。你知道吗

您可以在none捕获组中定义可选的前面模式,在捕获组中定义关键字,然后在match之后获得第二个匹配的gorup(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不起作用,因为它将返回

相关问题 更多 >