引号之间的正则表达式向前看 - Python

时间:2016-02-01 20:27:28

标签: python regex lookahead

我有这个:

myText = str(^123"I like to"^456&U"play video games and"$"eat cereal")

我想提取引号之间的所有内容(包括引号),在$符号之前和之后拆分所有内容,然后将它们附加到嵌套列表中。 E.g。

myTextList = [["我喜欢","玩视频游戏和"],["吃麦片"]]

这就是我的尝试:

tempTextList = []
for text in re.findall('(?<=\$)"[^"]*"(?<!\^)',myText,re.DOTALL)
    tempTextList.append(text)
myTextList.append(tempTextList)

我使用网站https://www.regex101.com/#python并尝试了几乎所有我能想到的内容......

(?!\$)"(?!\^\00\+\-\&)[^"].*" 等...

re.findall部分并没有按我想要的方式工作。

有人能指出我正确的方向吗?

由于

1 个答案:

答案 0 :(得分:2)

您可以将"[^"]*"正则表达式与re.findall

一起使用
import re
s = 'myText = str(^123"I like to"^456&U"play video games and"$"eat cereal")'
print(re.findall(r'"[^"]*"', s))

请参阅demo

它匹配双引号所需的双引号子串:['"I like to"', '"play video games and"', '"eat cereal"']

请注意,"[^"]*""匹配,后跟除"之外的零个或多个字符,后跟"

如果您需要在没有双引号的情况下获取"..."内的内容,您可以使用捕获机制:

r'"([^"]*)"'

re.findall只返回第1组中的捕获。请参阅another demo