我的值是这样的:
"Foo Bar" "Another Value" something else
什么正则表达式将返回括在引号中的值(例如Foo Bar和Another Value)?
我的值是这样的:
"Foo Bar" "Another Value" something else
什么正则表达式将返回括在引号中的值(例如Foo Bar和Another Value)?
当前回答
我一直在使用以下方法并取得了巨大的成功:
(["'])(?:(?=(\\?))\2.)*?\1
它还支持嵌套引号。
对于那些想要更深入地解释这是如何工作的人,这里是用户ephemerent的解释:
([""'])匹配引号;((?=(\\?))\2.)如果存在反斜杠,吞噬它,无论是否发生,匹配一个字符;* ?匹配多次(非贪婪,如不吃结尾引号);\1匹配相同的报价,是用于开幕。
其他回答
一般来说,下面的正则表达式片段就是你要找的:
"(.*?)"
这使用了非贪婪的*?运算符来捕获下一个双引号之前的所有内容。然后,使用特定于语言的机制提取匹配的文本。
在Python中,你可以这样做:
>>> import re
>>> string = '"Foo Bar" "Another Value"'
>>> print re.findall(r'"(.*?)"', string)
['Foo Bar', 'Another Value']
如果你试图查找只有特定后缀的字符串,比如点语法,你可以尝试这样做:
\"([^\"]*?[^\"]*?)\". 本地化
其中。本地化是后缀。
例子:
打印(“这是我需要归还的东西”。本地化+“所以是这个”。本地化+ "but this is not")
它会捕捉到“这是我需要归还的东西”。本地化和“这也是”。本地化但不是“but this is not”。
与亚当的答案不同,我有一个简单但有效的答案:
(["'])(?:\\\1|.)*?\1
如果你想要得到引号中的内容,只需添加圆括号:
(["'])((?:\\\1|.)*?)\1
$1匹配引号字符,$2匹配内容字符串。
我的解决方案如下
(\[‘])。* 1 (? ! [s ^ \])
演示链接:https://regex101.com/r/jlhQhV/1
解释:
(["'])->匹配'或',一旦找到匹配,将其存储在反向引用\1中
.* ->贪婪的方法继续匹配所有内容0次或更多次,直到它在字符串末尾遇到'或"。遇到这种状态后,正则表达式引擎返回到上一个匹配字符,此时正则表达式结束,将移动到下一个正则表达式。
\1 ->匹配先前与第一个捕获组匹配的字符或字符串。
(?![^\s]) ->负前向,确保在之前的匹配之后不应该有任何非空格字符
这个版本
转义引号的说明 控制回溯 /(["'])((?:(?!\ 1 )[^\\]|(?:\\\\)*\\[^\\])*)\ 1 /