亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

正則表達式:如果字符被轉義,則解析不同

正則表達式:如果字符被轉義,則解析不同

浮云間 2023-06-06 10:16:07
鑒于此字符串"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.Are.ASCIIre.compile,您可以將其縮短為

[\w+;-]+(?:\\,[\w+;-]+)*

正則表達式詳細信息

  • [\w+;-]+- 一個或多個單詞+、;-字符

  • (?:\\,[\w+;-]+)*- 0 次或多次出現\,后跟 1+ 個單詞、+;字符的-子字符串。

Python 演示

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']

請注意此處的雙反斜杠,在字符串文字內,表示單個文字反斜杠。


查看完整回答
反對 回復 2023-06-06
  • 1 回答
  • 0 關注
  • 109 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號