2016-02-01 22 views
1

我有这样的:正则表达式行情展望未来之间 - 的Python

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

我想在两者之间(含)引号中提取的一切,前后$标志分裂的一切,并把它们添加到嵌套名单。例如。

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

你想你的结果列表像引号?或没有? – tinySandy

+0

你可以同时显示。我认为''“[^”] *“''显示带引号的结果,'”(。*?)“'显示不带引号的结果。 –

+1

你想先分割'$'然后找到引用的吗? – sln

回答

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

+0

哇,这很快!谢谢@WiktorStribizew。另外,为防万一我不想用双引号的子字符串,我会用'“(。*?)”'而不是''“[^”] *“'',对吗? –

+1

您可以捕捉双引号内的内容。你可以使用'r'“([^”] *)“''并访问'group(1)'。注意,只有使用DOTALL修饰符时,'。*?'才是好的,模式的结尾。请注意,'re.findall'只会返回一个捕获的子串列表。 –

+0

如果你需要匹配里面的转义实体,你也可以使用'r'“[^”\\] *(?:\\。[^“\\] *)*”''(或'r'“( [^“\\] *(?:\\。[^”\\] *)*)“''获得不带双引号的捕获)。 –