[英]Search Strings for Wildcard in python and return position of match
我目前正在处理一个由数千个具有身份的字符串组成的数据集,并想搜索通配符主题(由 N 后跟除 P 之外的任何字母组成,然后是 S 或 T)的位置使用 RegEx 模块在字符串中出现,并返回一个 ID 对列表,其中包含主题出现的位置。
import re
strings = [['ID#1','NTGSLTKNASMNLTQRSNQT'],['ID#2','NLSHTNWEUWBNTTDKWODNUT'],...]
for x in strings:
re.search('N[^P][ST]',x[1])
我想返回:
[['ID#1',[8,12,18]],['ID#2',[1,12,20]],.....]
如果有人有任何想法,将不胜感激,谢谢!
您很可能正在寻找这个。
re.finditer(pattern, string[, flags])
返回一个迭代器,在字符串中 RE 模式的所有非重叠匹配上产生 MatchObject 实例。 从左到右扫描字符串,并按找到的顺序返回匹配项。 空匹配项包含在结果中,除非它们触及另一个匹配项的开头。
这将工作..
import re
strings = [['ID#1','NTGSLTKNASMNLTQRSNQT'],['ID#2','NLSHTNWEUWBNTTDKWODNUT']]
pattern = re.compile('N[^P][ST]')
print [[f[0], [m.start() + 1 for m in pattern.finditer(f[1])]] for f in strings]
或者你可以尝试像..
import re
strings = [['ID#1','NTGSLTKNASMNLTQRSNQT'],['ID#2','NLSHTNWEUWBNTTDKWODNUT']]
pattern = re.compile('N[^P][ST]')
for x in strings:
p = pattern.finditer(x[1])
print [[x[0], [m.start() + 1 for m in p]]
我在 Python 方面不是很有经验,但我认为你可以做这样的事情:
import re
strings = [['ID#1','NTGSLTKNASMNLTQRSNQT'],['ID#2','NLSHTNWEUWBNTTDKWODNUT']]
def findpos(s):
return [s[0], [m.start() + 1 for m in re.finditer('N[^P][ST]',s[1])]]
return map(findpos, strings)
// [['ID#1', [8, 12, 18]], ['ID#2', [1, 12, 20]]]
或者更简单地说,只是:
[[s[0], [m.start() + 1 for m in re.finditer('N[^P][ST]',s[1])]] for s in strings]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.