正则表达式:如果字符被转义,则解析不同

鉴于此字符串"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\-_\+;(\\,)]+'

基本上是尝试将字符序列添加\,到要匹配的字符列表中。



浮云间
浏览 120回答 1
1回答

炎炎设计

你可以使用[a-zA-Z0-9_+;-]+(?:\\,[a-zA-Z0-9_+;-]+)*请参阅正则表达式演示如果您通过re.A或re.ASCII到re.compile,您可以将其缩短为[\w+;-]+(?:\\,[\w+;-]+)*正则表达式详细信息[\w+;-]+- 一个或多个单词+、;或-字符(?:\\,[\w+;-]+)*- 0 次或多次出现\,后跟 1+ 个单词、+或;字符的-子字符串。Python 演示:import restrings = [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']请注意此处的双反斜杠,在字符串文字内,表示单个文字反斜杠。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python