繁体   English   中英

您如何找到 substring 的所有实例,后跟一定数量的动态字符?

[英]How do you find all instances of a substring, followed by a certain number of dynamic characters?

我正在尝试查找特定子字符串的所有实例(以 a.b2 为例),并在 ZE83AED3DDF4667DEC0DAAAACB2BB3BE0BZ 匹配后返回 4 个字符。 以下 4 个字符始终是动态的,可以是任何字母/数字/符号。

我试过搜索,但似乎提出的类似问题正在请求某些字符的帮助,这些字符可以轻松拆分 substring,但由于我正在寻找的字符是动态的,我不确定如何编写正则表达式。

使用正则表达式时,可以使用“。” 动态匹配任何字符。 使用{number}指定要匹配多少个字符,并使用(.{number})中的括号指定应捕获匹配以供以后使用。

>>> import re
>>> s = "a!b2foobar a!b2bazqux a!b2spam and eggs"
>>> print(re.findall("a!b2(.{4})", s))
['foob', 'bazq', 'spam']

如果您只是在寻找如何使用Regex获取以下 4 个字符,那么您可能希望使用大括号指示符来匹配数量:'{}'。

他们 go 在这里的帖子中有更详细的信息,但基本上你会做[aZ][0-9]{X,Y}(.{X,Y}) ,其中 X 到 Y 是你的字符数寻找(在您的情况下,您只需要{4} )。


解决这个问题的一个更Pythonic的方法是使用字符串切片,然而索引 function。

例如。 给定一个 input_string,当您使用index在索引 i 处找到 substring 时,您可以使用input_string[i+len(sub_str):i+len(sub_str)+4]来获取这些特殊字符。

举个例子,

input_string = 'abcdefg'
sub_str = 'abcd'
found_index = input_string.index(sub_str)
start_index = found_index + len(sub_str)
symbol = input_string[start_index: start_index + 4]

输出(显示它也适用于 <4): efg

索引还允许您为搜索提供开始和结束索引,因此如果您想为每个子字符串查找它,也可以在循环中使用它,搜索索引的开始是上一个找到的索引 + 1。

import re
print (re.search(r'a!b2(.{4})')).group(1))

.{4}匹配除special characters group(0)是搜索字符串的完全匹配。 您可以在此处阅读有关组id的信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM