【问题标题】:Regular Expression to replace unknown value in text file - c# and asp.net正则表达式替换文本文件中的未知值 - c# 和 asp.net
【发布时间】:2011-11-16 16:58:03
【问题描述】:

我想在 asp.net 中使用 c# 函数替换文本文件中的一行。该行是:

SQL-SERVER-VERSION="某个未知值"

我不知道 = 之后的值可能是什么,所以我需要为此使用通配符。我希望新行改为:

SQL-SERVER-VERSION="2008"

我正在尝试使用 Regex.Replace 但无论我尝试什么正则表达式,它都不起作用。 有人可以帮忙吗? 谢谢, 约翰

【问题讨论】:

  • 好的,那么您尝试了什么?如果你不告诉我们,我们只能猜测什么不起作用。

标签: c# asp.net regex


【解决方案1】:

我不知道你已经尝试过什么,所以我不能告诉你你做错了什么,但以下应该可以工作:

string s = "SQL-SERVER-VERSION=\"some unknown value\"";
s = Regex.Replace(s, "SQL\\-SERVER\\-VERSION=\".*\"", "SQL-SERVER-VERSION=\"2008\"");

【讨论】:

  • 这失败了;例如,如果字符串只有SQL-SERVER-VERSION="",我认为所需的输出将是 2008 年。
  • 我假设这些引用中已经有一些价值,但很公平,我将+ 更改为*,现在已经涵盖了。
【解决方案2】:

试试这个:

  Regex rgx = new Regex(@"SQL-SERVER-VERSION="".*?""");
  string result = rgx.Replace(input, replacement);

.NET 字符串看起来有点乱,但纯正则表达式看起来像这样:

SQL-SERVER-VERSION=".*?"

【讨论】:

    【解决方案3】:

    如果您知道 " 不会出现在值中,那么您可以使用来定位字符串

    SQL-SERVER-VERSION=".*"

    并替换为 SQL-SERVER-VERSION="2008"

    例如

    strInput = Regex.Replace( strInput, "SQL-SERVER-VERSION="".*""", "SQL-SERVER-VERSION=""2008""")
    

    【讨论】:

    • " 是否出现在字符串中并不重要——* 默认情况下是贪婪的,并且会在字符串中找到最后一个引号(这可能是 OP 想要的。)
    • @ean5533,你为什么认为 OP 想要一个贪婪的匹配?
    • 因为它比假设更有意义。 OP 的示例行以引号结尾。在我看来,OP 想要所有内容,直到最后一个引号,即行尾。
    • @ean5533 好点。所以使用“.*”进行贪婪匹配,否则使用“.*?”
    猜你喜欢
    • 2022-08-19
    • 2021-10-11
    • 1970-01-01
    • 2020-09-23
    • 2014-03-11
    • 2015-05-31
    • 2013-01-12
    • 1970-01-01
    • 2017-10-18
    相关资源
    最近更新 更多