我有一个正则表达式引号之间找到之间的值:正则表达式查找报价
([\"'])(?:\\\1|.)*?\1
如果有报价之间的双引号然而,这工作得很好,的话,就无法和其拆分太。例如。
"value1","value2","value with "" is here","value4"
我需要一个像
value1
value2
value with "" is here
value4
输出也就是说,如果双引号出现的地方,它应该返回的输出。 任何人都可以帮忙吗?
我有一个正则表达式引号之间找到之间的值:正则表达式查找报价
([\"'])(?:\\\1|.)*?\1
如果有报价之间的双引号然而,这工作得很好,的话,就无法和其拆分太。例如。
"value1","value2","value with "" is here","value4"
我需要一个像
value1
value2
value with "" is here
value4
输出也就是说,如果双引号出现的地方,它应该返回的输出。 任何人都可以帮忙吗?
我的第一个想法是将它们添加到您的交替,让双引号:
([\"'])(?:\\\1|\1\1|.)*?\1
然而,由于你做出量词懒,这将仍然不太工作。最好让它明确的是转义引号不引号之间允许:
([\"'])(?:\\\1|\1\1|(?!\1).)*\1
看到它的regex101。
说明:
([\"']) # Match a quote, remember which kind in group 1.
(?: # Start non-capturing group:
\\\1 # Either match a backslash-escaped quote
| # or
\1\1 # a doubled quote
| # or
(?!\1) # (as long as it's not a quote)
. # any character.
)* # Repeat as necessary
\1 # Match a corresponding quote
您的输入看起来像一个CSV记录,其中文字报价是通过增加另一个报价逃脱。你是说你也可以用反斜杠来避免引用?我从未见过;它通常是一个或另一个。我从来没有见过CSV变体,它可以让你在同一记录中的单引号(撇号)或双引号之间进行切换。你可能会让它变得更加复杂。
假设只有双引号是公认的字段分隔符,并且他们只能通过增加另一个报价进行转义,匹配字段很简单,只要可以是:
(?:"[^"]*")+
的反斜杠转义版本更复杂一点:
"[^"\\]*(?:\\.[^"\\]*)*"
如果单引号分隔符也是允许的,最简单的方法是添加另一种选择:
(?:"[^"]*")+|(?:'[^']*')+
"[^"\\]*(?:\\.[^"\\]*)*"|'[^'\\]*(?:\\.[^'\\]*)*'
如果你真的需要支持这两种引用和两种逃避,请参阅蒂姆的答案。但我非常怀疑。
是的,它是CSV文件的一部分。是的,你提供的表达式有效(?:“[^”] *“)+ |(?:'[^'] *')+您和@ time-pietzcker都提供了正确的解决方案。我不知道如何将两个答案都标记为“答案”。似乎我只能标记一个。 –
是的,它是CSV文件的一部分。是的,你提供的表达式是'([\''])(?:\\\ 1 | \ 1 \ 1 |(!!\ 1)。)* \ 1',但是另一个表达式不会。 –