簡體   English   中英

在python中搜索通配符的字符串並返回匹配位置

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM