我试图从字符串中除引号之外的所有引用(“或”)子串。 我想出了这个:
"((?:').*[^'](?:'))|((?:\").*[^\"](?:\"))"
由于某种原因,匹配的字符串中仍包含引号。 有什么理由吗?
此致,nikita.utiu。
答案 0 :(得分:1)
你可以用前瞻和后瞻性的断言来做到这一点:
>>> match = re.search(r"(?<=').*?(?=')", "a 'quoted' string. 'second' quote")
>>> print match.group(0)
quoted
答案 1 :(得分:0)
使用非捕获组并不意味着根本不捕获它们。他们只是不像普通组那样创建单独的捕获组。
但正则表达式的结构要求引号是匹配的一部分:
"('[^']*'|\"[^\"]*\")"
然后在使用matched_string[1:-1]
处理匹配的部分时删除周围的引号。
答案 2 :(得分:0)
你可以尝试:
import shlex
...
lexer = shlex.shlex(your_input_string)
quoted = [piece.strip("'\"") for piece in lexer if piece.startswith("'") or piece.startswith('"')]
shlex(词法分析)为您处理转义报价。虽然请注意它不适用于unicode字符串。