文字列に含まれていないPythonステートメントのすべての部分を返す必要があると思うコードがいくつかあります。しかし、それが私が望むほど厳密であるかどうかはわかりません。基本的には、次の文字列区切り文字を見つけるだけで、同じ区切り文字で閉じられるまで「文字列」状態のままになります。私が考えもしなかった奇妙な事件のために私がしたことには何か問題がありますか?それはPythonが行うことと何らかの形で矛盾しますか?
# String delimiters in order of precedence
string_delims = ["'''",'"""',"'",'"']
# Get non string parts of a statement
def get_non_string(text):
out = ""
state = None
while True:
# not in string
if state == None:
vals = [text.find(s) for s in string_delims]
# None will only be reached if all are -1 (i.e. no substring)
for val,delim in zip(vals+[None], string_delims+[None]):
if val == None:
out += text
return out
if val >= 0:
i = val
state = delim
break
out += text[:i]
text = text[i+len(delim):]
else:
i = text.find(state)
if i < 0:
raise SyntaxError("Symobolic Subsystem: EOL while scanning string literal")
text = text[i+len(delim)]
state = None
入力例:
get_non_string("hello'''everyone'''!' :)'''")
出力例:
hello!