Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 用于在引号之间查找值的正则表达式_Regex_Vb.net - Fatal编程技术网

Regex 用于在引号之间查找值的正则表达式

Regex 用于在引号之间查找值的正则表达式,regex,vb.net,Regex,Vb.net,我有一个正则表达式来查找引号之间的值: ([\"'])(?:\\\1|\1\1|(?!\1).)*\1 ([\“'))(?:\\\1 |。)*?\1 这很好,但是,如果引号之间有双引号,那么它也会失败并拆分它们 “value1”、“value2”、“带“”的值在这里”、“value4” 我需要像这样的输出 value1 价值2 带“”的值在此处 价值4 这意味着,如果双引号出现在某个地方,它应该在输出中返回该双引号。 有人能帮忙吗?我的第一个想法是通过将双引号添加到您的备选方案中来允许双

我有一个正则表达式来查找引号之间的值:

([\"'])(?:\\\1|\1\1|(?!\1).)*\1
([\“'))(?:\\\1 |。)*?\1
这很好,但是,如果引号之间有双引号,那么它也会失败并拆分它们

“value1”、“value2”、“带“”的值在这里”、“value4”
我需要像这样的输出

value1
价值2
带“”的值在此处
价值4
这意味着,如果双引号出现在某个地方,它应该在输出中返回该双引号。
有人能帮忙吗?

我的第一个想法是通过将双引号添加到您的备选方案中来允许双引号:

([\"'])(?:\\\1|\1\1|.)*?\1
但是,由于您已将量词设置为惰性,因此这仍然不起作用。最好明确表示引号之间不允许使用未转换的引号:

([\"'])(?:\\\1|\1\1|(?!\1).)*\1
在电视上看

说明:


您的输入看起来像CSV记录,其中文字引号通过添加另一个引号进行转义。您是说您也可以使用反斜杠转义引号?我从未见过这种情况;它通常是一个或另一个。我从未见过允许您在单引号(撇号)之间交替的CSV变体或者在同一条记录中加上双引号。这可能是你让事情变得更复杂了

假设只有双引号被识别为字段分隔符,并且只能通过添加另一个引号对其进行转义,则匹配字段非常简单:

(?:“[^”]*”)+
反斜杠转义版本稍微复杂一些:

“[^”\]*(?:\\.[^”\]*)*”
如果还允许使用单引号分隔符,则最简单的方法是添加另一个替代项:

(?:“[^”]*”+|(?:“[^”]*”)+
"[^"\\]*(?:\\.[^"\\]*)*"|'[^'\\]*(?:\\.[^'\\]*)*'

如果您真的需要同时支持两种引用和两种转义,请参阅Tim的答案。但我非常怀疑。

是的,它是CSV文件的一部分。是的,您提供的表达式可以工作“([\”])(?:\\\1\1\1(?!\1)。*\1”,但另一个表达式不能。但我很高兴也感谢你,我得到了一个解决方案。是的,它是CSV文件的一部分。是的,您提供的表达式有效(?“[^”]*”+|(?:“[^']*”)+您和@time pietzcker都提供了正确的解决方案。我不知道如何将两个答案标记为“答案”。似乎我只能标记一个。