【问题标题】:Is it possible to place a string variable inside a Regex? [duplicate]是否可以在正则表达式中放置一个字符串变量? [复制]
【发布时间】:2019-12-30 16:39:41
【问题描述】:

是否可以在正则表达式中放置字符串变量?如果是这样..怎么样? 我已经用正则表达式玩了 4 个小时了,我还需要完成一件事。

return (new Regex(@"\bA=(\d+[/]\d+)").Match(From).Groups[1].Value.Trim()).ToString();

只有在字符串中的“A=”之后并提取它时,这条线基本上会得到任何小数,如 42/13。 所以这是我的问题 - 是否有可能做这样的事情:

string variable;
Regex(@"\b"variable"=(\d+[/]\d+)").Match(From).Groups[1].Value.Trim()).ToString();

我们的想法是让变量中的任何内容都成为正则表达式,例如,如果我们在变量中输入 D,现在是 D= 现在是 A=。

提前致谢。

【问题讨论】:

  • 您需要将@ 添加到每个字符串并按照通常的方式连接:@"\b" + variable + @"=(\d+/\d+)"。您也不需要将/ 封装为[/],只需按字面意思使用即可。另请注意,您应该使用 Regex.Escape() method 转义变量
  • 里面只是一个字符串,你可以做类似Regex($@"\b{variable}=(\d+[/]\d+)")
  • @ctwheels 谢谢伙计,正是我所要求的,然后是一些。而且也很快。再次感谢您。

标签: c# .net regex


【解决方案1】:

这是字符串插值。您可以在字符串上使用 $ 运算符来使用它。示例

        string variable = "hello";
        Regex regex = new Regex($@"\b{Regex.Escape(variable)}=(\d+[/]\d+)");

【讨论】:

  • 我想这也可以,谢谢。
  • Regex.Escape(变量)
  • @MikaTähtinen 已更新,谢谢
【解决方案2】:

你需要像往常一样连接你的字符串 (+) 并在每个字符串前面加上 @ 如果使用反斜杠而不转义它们。您也不需要将字符类中的/ 封装为[/]。或者,as mentioned by Josh in his answer 和 Ron Beyer 在您的问题下方的评论中,您可以使用插值。

@"\b" + variable + @"=(\d+/\d+)"

此外,您应该对变量使用 Regex.Escape() 方法以确保任何特殊字符都被转义(这将防止您的模式失败或进行不正确的匹配) - 清理您的变量。

【讨论】:

  • 如果变量包含正则表达式结构怎么办。 variable = '[AD]?'; 目的。
  • @x15 这就是为什么我提到 OP 应该使用 Regex.Escape() 方法。我的答案的最后一段解决了这个问题?
猜你喜欢
  • 2019-01-10
  • 1970-01-01
  • 2021-10-20
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 2014-05-23
  • 2020-03-24
  • 1970-01-01
相关资源
最近更新 更多