我有一個字串
aaabbbbcca
我想從中決議所有可能的統一子字串。所以我對這個字串的預期子字串是
['a', 'aa', 'aaa', 'b', 'bb', 'bbb', 'bbbb', 'c', 'cc', 'a']
我嘗試了以下
import re
print(re.findall(r"([a-z])(?=\1*)", "aaabbbbcca"))
# Output: ['a', 'a', 'a', 'b', 'b', 'b', 'b', 'c', 'c', 'a']
是否可以通過正則運算式?如果是,那么如何?
uj5u.com熱心網友回復:
你可以在沒有正則運算式的情況下實作你所需要的:
result = []
text = "aaabbbbcca"
prev = ''
for c in text:
if c == prev:
result.append(result[-1] c)
else:
result.append(c)
prev = c
print(result)
# => ['a', 'aa', 'aaa', 'b', 'bb', 'bbb', 'bbbb', 'c', 'cc', 'a']
請參閱Python 演示。
result簡而言之,當新字符不等于前一個字符時,您可以遍歷字串并將新專案附加到串列中,否則,附加一個新專案,其值等于前一個專案 連接到該值的相同字符.
使用正則運算式,你能做的最好的就是
import re
text = "aaabbbbcca"
print( [x.group(1) for x in re.finditer(r'(?=((.)\2*))', text)] )
# => ['aaa', 'aa', 'a', 'bbbb', 'bbb', 'bb', 'b', 'cc', 'c', 'a']
請參閱此 Python 演示。在這里,(?=((.)\2*))匹配字串中緊隨其后的任何一個字符(如果不使用re.DOTALL選項,換行符除外)的任何位置,然后是零次或多次出現的相同字符(將字符捕獲到組中) 1)。
uj5u.com熱心網友回復:
您可以使用正則運算式來查找相同字符的條紋,然后在頂部使用一些 Python 來構建較小的條紋。
import re
s = 'aaabbbbcca'
matches = (m.group() for m in re.finditer(r'([a-z])\1*', s))
result = [m[:i] for m in matches for i in range(1, len(m) 1)]
uj5u.com熱心網友回復:
我認為這個特殊問題可以用正則運算式來解決。答案基于this answer,其中提取了部分數字。解釋與其他答案相同。每個匹配都會在前瞻中創建一個空組和一個組。前瞻捕獲或至少長度為 1 的序列。之后,我們只需創建第二組中的字串串列a。bc
import re
s = "aaabbbbcca"
matches = re.finditer(r'(?=(a{1,}|b{1,}|c{1,}))',s)
results = [match.group(1) for match in matches]
print(results)
輸出:
['aaa', 'aa', 'a', 'bbbb', 'bbb', 'bb', 'b', 'cc', 'c', 'a']
輸出的值與請求的值相同,但順序不完全相同。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/437444.html
