Python正则表达式非捕获问题?
我想从一个字符串中提取所有被引号(" 或 ')包围的子字符串,但不包括引号本身。于是我想出了这个方法:
"((?:').*[^'](?:'))|((?:\").*[^\"](?:\"))"
但是不知为什么,匹配到的字符串里还是包含了引号。请问这是为什么呢?
真诚的,nikita.utiu。
3 个回答
0
你可以试试:
import shlex
...
lexer = shlex.shlex(your_input_string)
quoted = [piece.strip("'\"") for piece in lexer if piece.startswith("'") or piece.startswith('"')]
shlex(词法分析)会帮你处理转义的引号。不过要注意,它不支持unicode字符串。
0
使用非捕获组并不意味着它们完全不被捕获。它们只是不会像普通的捕获组那样创建单独的捕获组。
不过,正则表达式的结构要求引号是匹配的一部分:
"('[^']*'|\"[^\"]*\")"
然后在处理匹配的部分时,只需用 matched_string[1:-1]
去掉周围的引号就可以了。
1
你可以使用前瞻和后顾断言来实现这个功能:
>>> match = re.search(r"(?<=').*?(?=')", "a 'quoted' string. 'second' quote")
>>> print match.group(0)
quoted