gpt4 book ai didi

c# - 用于匹配 C# 字符串文字的正则表达式

转载 作者:太空狗 更新时间:2023-10-29 22:17:25 24 4
gpt4 key购买 nike

我正在尝试写一个 regular expression它将匹配包含以下形式的名称-值对的字符串:

<name> = <value>, <name> = <value>, ...

其中 是 C# 字符串文字。我已经知道我需要通过这个正则表达式找到的 s。到目前为止,我有以下内容:

regex = new Regex(fieldName + @"\s*=\s*""(.*?)""");

这很好用,但在我尝试匹配的字符串包含带有转义引号的 的情况下,它当然无法匹配。我正在努力找出如何解决这个问题,我 认为我需要前瞻性,但需要一些指导。例如,我希望能够匹配下面“困难”命名值的值:

difficult = "\\\a\b\'\"\0\f \t\v", easy = "one"

我希望能对您的回答做出合理的解释,我想学习,而不是复制 ;-)

最佳答案

试试这个来捕获键和值:

(\w+)\s*=\s*(@"(?:[^"]|"")*"|"(?:\\.|[^\\"])*")

作为奖励,它也适用于逐字字符串。

C# 示例:https://dotnetfiddle.net/vQP4rn

这是一个注释版本:

string pattern = @"
(\w+)\s*=\s* # key =
( # Capturing group for the string
@"" # verbatim string - match literal at-sign and a quote
(?:
[^""]|"""" # match a non-quote character, or two quotes
)* # zero times or more
"" #literal quote
| #OR - regular string
"" # string literal - opening quote
(?:
\\. # match an escaped character,
|[^\\""] # or a character that isn't a quote or a backslash
)* # a few times
"" # string literal - closing quote
)";
MatchCollection matches = Regex.Matches(s, pattern,
RegexOptions.IgnorePatternWhitespace);

请注意,与 C# 不同,常规字符串允许对所有字符进行转义,并且允许换行。如果您需要验证,它应该很容易更正,但它应该是用于解析的文件。

关于c# - 用于匹配 C# 字符串文字的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4953737/

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