[英]Python Regex matching certain characters that are not between quotes
我正在嘗試從字符串中提取令牌,以便這些令牌滿足某些條件。 在我的特殊情況下,我想提取諸如 +、=、- 等符號。
我創建了以下正則表達式:
reg = re.compile(r"[\{\}\(\)\[\]\.,;\+\-\*\/\&\|<>=~]")
但是,當我申請時:
reg.findall('x += "hello + world"')
它還匹配引號之間的 +,因此它輸出:
['+', '=', '+']
我的預期輸出是:
['+', '=']
我的問題是,我如何實現這一目標? 甚至有可能嗎? 我一直在網上沖浪,但只找到了如何匹配除雙引號之外的所有內容,以及類似的內容。
首先,您不需要轉義字符類中的每個特殊字符(撇開[
和]
)。 所以你的初始表達變成了…… 喜歡:
[-\[\]{}().,;+*/&|<>=~]
現在到第二個要求:匹配某些位置(並保留一些原樣)。 在這里,您可以使用較新的regex
模塊並編寫( regex101.com 上的演示):
"[^"]+"(*SKIP)(*FAIL)|[-\[\]{}().,;+*/&|<>=~]
re
模塊和一些編程邏輯中使用括號:
import re rx = re.compile(r'"[^"]+"|([-\\[\\]{}().,;+*/&|<>=~])') string = 'x += "hello + world"' symbols = [match.group(1) for match in rx.finditer(string) if match.group(1)] print(symbols)
['+', '=']
match_this_but_dont_save_it | (keep_this)
您可能想在這里閱讀更多關於(*SKIP)(*FAIL)
信息。
我認為你可以做一件事你可以限制一次
”
會來它不會檢查正則表達式,直到再次出現
”
來了
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.