2017-08-11 47 views
1

我可能会问重复的问题,但我不能找到解决我的问题,请饶了! 我需要捕获正则表达式通过用引号括起来的短语。这很容易,但是当没有像在以下情况下 'सीक्रेट सुपरस्टार'‘ डॉन 2 ’ 我使用re.findall(r"['(.*?)' |‘(.*?)’] ",text)试图引号的均匀性就会出现问题。但是这并不成功。 我需要一个正则表达式来找到包含在不同类型的引号的短语。捕捉引号的短语,虽然正则表达式

+0

删除空白和'['和']'。 –

+0

这个答案可以帮助你https://stackoverflow.com/a/9523932/5513005 –

回答

1

您可以使用

(?:(')|(‘))(.*?)(?(1)'|(?(2)’)) 

regex demo

详细

  • (?:(')|(‘)) - 匹配并捕获'(把它放入第1组)或匹配并捕获(并将其放入组2)
  • (.*?) - 匹配以外的任何字符0+比行断字,尽可能少
  • (?(1)' - 如果第1组匹配,匹配'
  • | - 否则
  • (?(2)’ - 如果第2组相匹配,匹配
  • )) - 条件结构的结束。

见下面的Python 2.7 demo

rx = ur'''(?:(')|(‘))(.*?)(?(1)'|(?(2)’))''' 
s=u"'सीक्रेट सुपरस्टार' and ‘ डॉन 2 ’" 
for x in re.finditer(rx, s): 
    print(x.group(3).encode("utf8")) 

输出:

सीक्रेट सुपरस्टार 
डॉन 2 
+1

感谢您的回答。但我需要添加更多的条件来检查像包围在“सुपरस्टार”或一些其他类型的引号的文本短语。有了上述解决方案,我只能捕获2个条件。有没有办法包含多个条件? –

+0

是的,只需在第一个“(?:...)”组中添加更多的捕获组作为替代方案,在结尾添加更多的条件结构检查。你也可以尝试另一种匹配字符串的方式,比如'['''](。*?)[''']'。看[这个Python演示](https://ideone.com/GKXCjL)。甚至['[ ' “]([^'”'] *)[“']'](https://ideone.com/Y6Dazl)检查这些正则表达式[** **这里(HTTPS: //regex101.com/r/5D4SpO/1)。 –