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