我正在嘗試將字串拆分為初始數字組件和其余組件,使用第一次出現的字母作為分隔符,例如:
"123b" -> ["123", "b"]
"12b7.97ap" -> ["12", "b7.97ap"]
我是正則運算式的新手,我無法實作這一點......我能做的最好的事情是:
re.split(r"(\d )", string)
但這會回傳:
["", "123", "b"]
["", "12", "b", "7", ".", "97", "ap"]
對于上面的兩個例子。我想我可以將索引 1 之后的所有元素組合成一個字串,但我確信有更好的方法......提前感謝您的幫助!
uj5u.com熱心網友回復:
一種可能性,首先匹配數字,然后匹配其余的:
import re
for s in "123b", "12b7.97ap":
print(re.findall(r'\d |. ', s))
輸出:
['123', 'b']
['12', 'b7.97ap']
uj5u.com熱心網友回復:
你可以寫:
str = '12b7.97ap'
re.split(r'(?<=\d)(?!\d)', str, 1)
#=> ["12", "b7.97ap"]
Python 演示| 正則運算式演示
split的可選第三個引數(此處1)是要執行的最大拆分數。
\d正則運算式匹配數字 ( ) 之后且不在數字之前的第一個(零寬度)位置(考慮在連續字符之間) 。(?<=\d)是積極的回顧;(?!\d)是負前瞻。
此解決方案不需要字串以數字開頭。例如:
str = 'Prefix 12b7.97ap'
re.split(r'(?<=\d)(?=\D)', str, 1)
#=> ["Prefix 12", "b7.97ap"]
uj5u.com熱心網友回復:
我建議您閱讀python 檔案以了解正則運算式中的組。您可以通過 sup 正則運算式在匹配項中形成組,而不是參考這些匹配項。一個最小的完整作業示例可能如下所示:
import sys
import re
if __name__ == '__main__':
for line in sys.stdin:
line = line.rstrip()
if line in ['exit', 'q']:
exit()
else:
match = re.search(r'(\d )(. )', line)
print(f"group1: {match.group(1)} | group2: {match.group(2)}")
但是,從長遠來看,在考慮“好的 pythonic”解決方案或獲得更好的性能時,你不應該在一開始就太擔心。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/429474.html
