簡體   English   中英

Python 正則表達式匹配不在引號之間的某些字符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM