Python 正则表达式 : finding sequence of chars inside a string

标签 python regex string

我正在使用 python 和正则表达式(两者都是新的)来查找字符串中的字符序列,如下所示: 获取 p 的第一个实例,后跟任意数字(它始终采用 p_ _ 的形式,其中 _ 和 _ 为整数)。然后找到“s”或“go”,然后找到所有整数,直到字符串末尾。例如:

ascjksdcvy<​​strong>p12nbvnzxcmgonbmbh12hjg23

应该产生 p12 go 12 23。

ascjksdcvy<​​strong>p12nbvnzxcmsnbmbh12hjg23

应该产生 p12 s 12 23。

我只设法获取字符串的 p12 部分,这是我迄今为止尝试提取“go”或“s”的方法:

decoded = (re.findall(r'([p][0-9]*)',myStr))
print(decoded) //prints p12 

我知道通过做类似的事情

re.findall(r'[s]|[go]',myStr)

会给我所有出现的s、g和o,但类似的东西不是我想要的。我不确定如何组合这些正则表达式来获得所需的输出。

最佳答案

使用re.findall使用模式分组:

>>> string = 'ascjksdcvyp12nbvnzxcmgonbmbh12hjg23'
>>> re.findall(r'(p\d{2}).*(s|go)\D*(\d+)(?:\D*(\d+))*', string)
[('p12', 'go', '12', '23')]

>>> string = 'ascjksdcvyp12nbvnzxcmsnbmbh12hjg23'
>>> re.findall(r'(p\d{2}).*(s|go)\D*(\d+)(?:\D*(\d+))*', string)
[('p12', 's', '12', '23')]
  • re.findall我们只愿意得到模式分组匹配的()

  • p\d{2}匹配p之后的任意两位数字

  • 之后.*匹配任何内容

  • 那么,s|go匹配 sgo

  • \D*匹配任意数量的非数字

  • \d+表示一位或多位数字

  • (?:)是一个非捕获组,即内部的匹配不会出现在输出中,它只是为了对标记进行分组

注意:

>>> re.findall(r'(p\d{2}).*(s|go)(?:\D*(\d+))+?', string)
[('p12', 's', '12')]

>>> re.findall(r'(p\d{2}).*(s|go)(?:\D*(\d+))+', string)
[('p12', 's', '23')]

我想使用上述两者之一,因为匹配后面的数字是一种重复的任务,但非贪婪和贪婪匹配都存在问题,因此我们需要匹配 s 之后的数字或go嗯,有点明确。

关于Python 正则表达式 : finding sequence of chars inside a string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35250035/

相关文章:

python - PyCharm 导入外部库

javascript - 正则表达式 - 重复否定字符类?

Javascript正则表达式匹配转义的html字符代码

python - 给定两个相同长度的 python 列表。如何返回相似值的最佳匹配?

python - 无法在 python 中导入自定义 DLL

python - 如何从文本文件导入包含字典的数组?

python - 更改马赛克图的默认颜色

java - 带有空格的长度的正则表达式

C# 将包含 c 样式字符串的 byte[] 转换为字符串 - NOT Encoding.GetString(byte[])

algorithm - 通过相似性匹配 2 个字符串列表