【问题标题】:Search Strings for Wildcard in python and return position of match在python中搜索通配符的字符串并返回匹配的位置
【发布时间】:2013-08-19 09:05:13
【问题描述】:

我目前正在处理一个由数千个具有身份的字符串组成的数据集,并且想搜索通配符主题的位置(由 N 后跟除 P 之外的任何字母,然后是 S 或a 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]],.....]

如果有人有任何想法,将不胜感激,谢谢!

【问题讨论】:

    标签: python regex string search


    【解决方案1】:

    您很可能正在寻找这个。

    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]]
    

    【讨论】:

      【解决方案2】:

      我对 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]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-04
        • 1970-01-01
        • 2018-10-15
        • 1970-01-01
        相关资源
        最近更新 更多