【问题标题】:C# Regex and the @ operator -- which seems to mean literal [duplicate]C# 正则表达式和 @ 运算符——这似乎意味着文字 [重复]
【发布时间】:2022-11-04 02:32:31
【问题描述】:

这是为了强调在从 C# 调用时使用 @ 运算符对 Regex 的帮助。它已被标记为重复,即使被认为是它正在复制的原始问题甚至没有提到正则表达式。

参考堆栈溢出问题:

Regex.Match whole words

Philippe Leybaert 给出的答案是:

https://stackoverflow.com/questions/1209049/regex-match-whole-words#:~:text=Regex.Match(content%2C%20%40%22%5Cb(shoes%7Cshirt%7Cpants)%5Cb%22)%3B

Regex.Match(content, @"\b(shoes|shirt|pants)\b");

@ 是干什么用的? 它似乎是字面意思,尽管我认为:

该|被解释为 OR 运算符而不是实际 |特点。 除非@在那里,否则这似乎也行不通。

上述说法是否属实?

【问题讨论】:

  • 仅供参考,这与正则表达式无关。
  • @"\b(shoes|shirt|pants)\b" == "\\b(shoes|shirt|pants)\\b"
  • 正则表达式将起作用。正则表达式是一个文本,\b(shoes|shirt|pants)\b。你所展示的是一个字符串字面量.两个链接都解释了@ 的作用。
  • @JosephDoggie 当然,因为 @"|" = "|" 并定义了一个 | 字符。如果您需要匹配文字 |,请将其转义。见What special characters must be escaped in regular expressions?
  • @JosephDoggie 简单地说,在 C# 中,如果你想写一个文字反斜杠,你有两个选择。要么通过连续写两次来转义它,要么在逐字字符串中写一次(即,前面有@)。现在,该反斜杠是否是正则表达式模式的一部分并不重要;规则是一样的。 | 字符确实不是需要在 C# 字符串中进行转义,因此无论是否逐字都无关紧要。但是,如果您希望正则表达式模式具有文字管道字符,那么您需要使用反斜杠对其进行转义。

标签: c# literals


【解决方案1】:

使用了@ 运算符,因此您不必转义给定字符串中的任何反斜杠。

string a = "Escape\d";
string b = @"Escaped";

您还可以使用它定义多行字符串:

string c = @"
A
multiline
string
";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-01
    • 2020-09-08
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多