簡體   English   中英

Python:查找變量char的正則表達式

[英]Python: Finding Regex occurance for variable char

我知道,例如,如果我想查找所有連續出現的“ a”的長度

在輸入=“ 1111aaaaa11111aaaaaaa111aaa”中,我可以

[len(s) for s in re.findall(r'a+', input)]


但是,我不確定如何使用char變量來執行此操作。 例如,

CHAR = 'a'
[len(s) for s in re.findall(r'??????', input)]    # Trying to find occurrences of CHARs..

有沒有辦法做到這一點??

這是一個通用解決方案,適用於任何長度的字符串:

CHAR = 'a'
[len(s) for s in re.findall(r'(?:{})+'.format(re.escape(CHAR)), input)]

或使用itertools的替代方法(僅單個字符):

import itertools
[sum(1 for _ in g) for k, g in itertools.groupby(input) if k == CHAR]

我認為您要的是:

[len(s) for s in re.findall(r'{}+'.format(CHAR), input)]

當然,如果CHAR是一個特殊值(例如\\ ,則無法使用。 如果這是一個問題:

[len(s) for s in re.findall(r'{}+'.format(re.escape(CHAR)), input)]

如果要匹配兩個或多個而不是一個或多個,則其語法為{2,} 正如文檔所說:

{m,n}使結果RE匹配先前RE的m到n個重復,並嘗試匹配盡可能多的重復。 例如, a{3,5}將匹配3到5個'a'字符。 省略m表示下限為零,而省略n表示無限上限。 例如, a{4,}b將匹配aaaab或一千個'a'字符,后跟a b ,但不aaab

當我們使用{}進行字符串格式化時,這有點難看,所以讓我們切換到% -formatting:

[len(s) for s in re.findall(r'%s{2,}' % (re.escape(CHAR),), input)]

…或只是簡單的串聯:

[len(s) for s in re.findall(re.escape(CHAR) + r'{2,}', input)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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