是否有一种正则表达式双引号匹配语法可以在C#中使用而无需修改?

是否有一种正则表达式双引号匹配语法可以在C#中使用而无需修改?,c#,regex,C#,Regex,下面的简单正则表达式包含四个必须匹配的双引号。我不打算为这个特殊的正则表达式想出一个解决方案,而只是将其作为一个通用示例: \s*"Hello"\s*"world"\s* 我在编写包含必须匹配双引号的正则表达式的C#代码时经常遇到的问题是,我不得不使用繁琐的语法,因为C#中的字符串文字是双引号分隔的。我使用了下面两种不同的技术,这两种技术我都不喜欢。除了将原始正则表达式转换为可接受的C#语法所需的额外复杂性之外,将该语法转换回原始正则表达式以进行额外开发是一个真正的难题。是否有任何形式可以被正

下面的简单正则表达式包含四个必须匹配的双引号。我不打算为这个特殊的正则表达式想出一个解决方案,而只是将其作为一个通用示例:

\s*"Hello"\s*"world"\s*
我在编写包含必须匹配双引号的正则表达式的C#代码时经常遇到的问题是,我不得不使用繁琐的语法,因为C#中的字符串文字是双引号分隔的。我使用了下面两种不同的技术,这两种技术我都不喜欢。除了将原始正则表达式转换为可接受的C#语法所需的额外复杂性之外,将该语法转换回原始正则表达式以进行额外开发是一个真正的难题。是否有任何形式可以被正则表达式引擎和C语言解析器同样接受

第一个破解使用转义字符来转义必须在正则表达式中出现的反斜杠和双引号。我认为这是最容易出错的方法,因为对于更复杂的正则表达式,您会被反斜杠淹没:

"\\s*\"Hello\"\\s*\"world\"\\s*"
第二种方法将原始正则表达式分解为多个部分并将它们连接起来。属于字符串文字且包含正则表达式反斜杠的片段前面带有@字符,以使反斜杠按字面理解,而不是作为转义字符。我认为这比前一种方法更详细,但更不容易出错:

@"\s*" + '"' + "Hello" + '"' + @"\s*" + '"' + "world" + '"' + @"\s*"
@“\s*”“Hello”“\s*”“world”“\s*”
给出字符串
\s*“Hello”\s*“world”\s*
。只需将
@
前置字符串(也称逐字字符串)中的双引号加倍,即可显示双引号


我发现,通过使用十六进制转义序列\x22表示双引号,相同的正则表达式字符串可以在我的正则表达式开发应用程序(RegexBuddy)和C#string文本中原封不动地使用。也就是说,在我的开发应用程序中

\s*"Hello"\s*"world"\s*
可以直接表示为

\s*\x22Hello\x22\s*\x22world\x22\s*
在C#字符串文字中,它可以表示为相同的正则表达式字符串

@"\s*\x22Hello\x22\s*\x22world\x22\s*"

字符串仍然杂乱无章,但至少不需要任何更改。

为什么这个问题被否决了?虽然这不是我想要的,但如果您的regex开发应用程序像RegexBuddy一样在regex和C#字符串之间有一个内置转换器,这是一个非常干净的解决方案。