簡體   English   中英

Python 正則表達式:添加限制,如果在匹配之前的某處和之后的某處有引號,則它不應該是匹配的

[英]Python Regex: add restriction that it should NOT be a match if there is a quotation mark somewhere before the match AND somewhere after

我想:

  1. 刪除下面示例匹配中的任何前導空格,並且
  2. 排除在字符串前的某些 position 處有引號且在字符串后的某些 position 處有另一個引號的匹配項(即不應匹配的字符串用引號括起來,但引號不一定直接在細繩)。

我嘗試將消極的后視和前瞻結合起來,但我不知何故無法弄清楚。

太感謝了!

我目前的 Python 正則表達式如下:

r'''(?<=[@])\s*[A-Z0-9.]+(?=\()'''
  1. @STRING1( # 結果:'STRING1' --> 有效
  2. @ STRI..NG2(# Result: 'STRI..NG2' --> 好的,但不包括空格。
  3. @ STRING.3( # Result: 'STRING.3' --> 好的,但不包括空格。

示例文本:
@STRING4("@STRING5( 可能還有"另一個@STRING6("__"可能這里是文本") 和@STRING7("甚至可能還有另一個@STRING8("---"和一個"最后"一個"@STRING9( &"也許還有一些"文本"

現在返回(包括前導空格):

  • '字符串 4'
  • 'STRING5'
  • '字符串 6'
  • '字符串 7'
  • “字符串 8”
  • 'STRING9'

期望回報:

  • '字符串 4'
  • '字符串 6'
  • 'STRING8'

我不能做你想做的一切,因為 Python 不允許非固定寬度的后視,但是這個:

reg = r"(?<=@)\s*([A-Z\d.]+)(?=(?:[^\"]*\"[^\"]*\")*$)"

應該管用。 注意它期望引號在整個字符串中正確平衡。 它也不考慮任何轉義引號( \" )。

編輯:我添加了一個捕獲組,您可以使用它來刪除前導空格。

一種方法是使用以下正則表達式

reg = r'(?:\"[^\"]+\")|(?:@\s*([A-Z0-9.]+)\()'

然后,您需要檢查匹配是否具有組 1。如果匹配,則為錯誤匹配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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