gpt4 book ai didi

c# - 在引号内查找包含重复引号的内容

转载 作者:太空宇宙 更新时间:2023-11-03 23:27:23 26 4
gpt4 key购买 nike

各位,

给定一个要解析的字符串:"Hello "& """world!"""

是否有可能以这样的两个匹配结束:"Hello""""world!"""

顺便说一下,我正在解析 VB 代码,我正在尝试查找 strings。它们总是用双引号引起来,但内部的重复双引号可能与 C# 中的 @"Hello ""world!""" 非常相似。

我愿意接受任何建议!我的代码解析器将用 C# 编写。

我正在使用 "[^"]+"".+?" 作为我试验的基础,但无法弄清楚如何获得想要的结果。

最佳答案

你的"[^"]+"会在"之后的第一个"处停止,因此,你不会得到"xx""z""" 子字符串作为输出,您将得到 "xx"。与 ".*?" 相同,因为您还没有限制了第二个 " 的直接上下文(除非您指定 RegexOptions.Singleline 标志,否则第二个正则表达式也会遇到换行符)。

您可以使用 following regex这也将匹配引号内的转义序列:

"[^"\\]*(?:(?:\\.|"")[^"\\]*)*"

或针对您的情况进行简化:

"[^"]*(?:""[^"]*)*"

参见 another demo .

后面的正则解释:

  • " - 匹配"
  • [^"]* - 匹配除 "
  • 之外的 0 个或多个字符
  • (?:""[^"]*)* - 匹配 0 个或多个 ...
    • "" - 2 个连续的引号
    • [^"]* - "
    • 以外的 0 个或多个字符
  • " - 匹配"

在 C# 中,您可以使用逐字字符串文字(您需要使用 "" 来表示一个文字 ")或常规字符串文字(您需要使用 \" 来表示 " 并对特殊正则表达式元字符使用双转义)来声明这些正则表达式。

逐字记录:

var rx = new Regex(@"""[^""]*(?:""""[^""]*)*""");

常规字符串文字:

var rx = new Regex("\"[^\"]*(?:\"\"[^\"]*)*\"");

我认为在这种情况下,常规的字符串文字声明更清晰。

关于c# - 在引号内查找包含重复引号的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33413351/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com