鑒于此字符串"foo-bar=369,337,234,123",我可以['foo-bar', '369', '337', '234', '123]使用此正則表達式將其解析為:re.findall(r'[a-zA-Z0-9\-_\+;]+', 'foo-bar=369,337,234,123'),現在,如果我對字符串中的某些部分進行轉義,例如"foo-bar=369\,337\,234,123",我希望它的解析方式有所不同:['foo-bar', '369\,337\,234', '123']。我嘗試了下面的正則表達式,但它不起作用:r'[a-zA-Z0-9\-_\+;(\\,)]+'基本上是嘗試將字符序列添加\,到要匹配的字符列表中。
1 回答

炎炎設計
TA貢獻1808條經驗 獲得超4個贊
你可以使用
[a-zA-Z0-9_+;-]+(?:\\,[a-zA-Z0-9_+;-]+)*
請參閱正則表達式演示
如果您通過re.A
或re.ASCII
到re.compile
,您可以將其縮短為
[\w+;-]+(?:\\,[\w+;-]+)*
正則表達式詳細信息
[\w+;-]+
- 一個或多個單詞+
、;
或-
字符(?:\\,[\w+;-]+)*
- 0 次或多次出現\,
后跟 1+ 個單詞、+
或;
字符的-
子字符串。
import re
strings = [r'foo-bar=369,337,234,123', r'foo-bar=369\,337\,234,123']
rx = re.compile(r"[\w+;-]+(?:\\,[\w+;-]+)*", re.A)
for s in strings:
print(f"Parsing {s}")
print(rx.findall(s))
輸出:
Parsing foo-bar=369,337,234,123
['foo-bar', '369', '337', '234', '123']
Parsing foo-bar=369\,337\,234,123
['foo-bar', '369\\,337\\,234', '123']
請注意此處的雙反斜杠,在字符串文字內,表示單個文字反斜杠。
添加回答
舉報
0/150
提交
取消