簡體   English   中英

將任意 Python 字符串與 Python 正則表達式匹配?

[英]Matching an arbitrary Python string with Python regex?

我正在使用 Python 源代碼語料庫。 我希望將字符串替換為STRING Python 字符串很煩人,因為它們允許使用太多分隔符。 這是我嘗試過的方法以及遇到的問題。

  • r'"(\\\\"|[^"])*"'r"'(\\\\'|[^'])*'"

    這不起作用,因為如果字符串包含相反的分隔符。

  • r'(\\'|"|\\'\\'\\'|""")(?:\\\\\\1|(?!\\1))*\\1'

    這是我試圖抓住一切,但前瞻不起作用。 如果可能的話,我基本上想要r'(\\'|"|\\'\\'\\'|""")(?:\\\\\\1|[^\\1])*\\1'

  • 多行字符串搞砸了。 不能使用[^"""]因為"""不是一個字符。

  • 包含其他分隔符的字符串,如"'"
  • 轉義分隔符的字符串,如'\\''

這些是需要匹配的字符串類型。 整個塊是一個包含分隔符的字符串。

  • '/$\\'"`'
  • '\\\\'
  • '^__[\\'\\\\"]([^\\'\\\\"]*)[\\'\\\\"]'
  • "Couldn't do that"

這些都是有效的字符串,但您可能會發現很難匹配它們的地方。 基本上,我想要這個:

def hello_world():
    print("'blah' \"blah\"")

成為:

def hello_world():
    print( STRING )

為簡單起見,假設整個 Python 文件都在一個字符串中。 現在我正在逐行讀取文件,但如有必要,我可以將其視為一個字符串。 如何讀取文件實際上並不重要。 如果您的解決方案需要特定方法,我將使用該方法。 我不確定這個問題可以用正則表達式完全解決。 如果您有一個涉及其他代碼的解決方案,那也將不勝感激。

您可以嘗試匹配帶引號的字符串但允許轉義的正則表達式:

[rR]?(?:'([^\\']*(?:\\.[^\\']*)*)'|"([^\\"]*(?:\\.[^\\"]*)*)")

演示

雖然這可能會捕獲大部分字符串,但我很確定仍有一些例外。

這是基於 J. Friedl 的展開循環技術:

展開循環(使用雙引號)

"                              # the start delimiter
 ([^\\"]*                      # anything but the end of the string or the escape char
         (?:\\.                #     the escape char preceding an escaped char (any char)
               [^\\"]*         #     anything but the end of the string or the escape char
                      )*)      #     repeat
                             " # the end delimiter

暫無
暫無

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

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