[英]Python : Finding all occurance of substring in string without using regex
[英]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'
字符,后跟ab
,但不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.