【问题标题】:Replace a text within a sentence in C#?在 C# 中替换句子中的文本?
【发布时间】:2012-10-21 23:35:32
【问题描述】:

我很抱歉这个问题看起来很愚蠢,但我真的很困惑

句子:

 String myline = "<form name='oldvalue' action='old_value' method='get'>"

预期结果:

  <form name='oldvalue' action='new_value' method='get'>

我想替换动作后引号之间的文本值。

我不想使用myLine.Replace,因为句子中action属性的值是随机的,我不在乎。无论它的价值如何,我都想被new_value 取代

我怎样才能做到这一点!谢谢你。

【问题讨论】:

  • 它是完全随机的还是存储在变量中?
  • 对不起,我的 String.Format() 答案,当您在引号内已经有一个值时,情况并非如此。使用正则表达式

标签: c# .net


【解决方案1】:

你可以使用regular expressions:

using System.Text.RegularExpressions;

String myline = "<form name='oldvalue' action='old_value' method='get'>";
String new_value = "new_value";
Regex.Replace(myline, "action='(.*?)'", new_value);

更新:

这段代码实际上返回&lt;form name='oldvalue' new_value method='get'&gt;

iedone@Nacereddine 提到)

如果您想返回&lt;form name='oldvalue' action='new_value' method='get'&gt;,请使用:

Regex.Replace(myline, @"(action=')(.*?)(')", "$1"+new_value+"$3");

【讨论】:

  • 是否可以将其用于整个 HTML 文档?不仅要修改一个字符串,而且我有一个完整的文档..
  • 是的,如果 myline 将是您的整个 HTML,它也可以工作 :)
  • 正则表达式在正确处理时非常强大。如果需要,它们允许您在库中找到任何类型的字符或字符串组合。
  • 同样的事情:替换后你会得到&lt;form name='oldvalue' new_value&gt;ideone.com/Yt50Mu
  • @Nacereddine 是的,我修好了,忘了“?”使其不贪婪。
【解决方案2】:

如果这一行是唯一的输入,您可以简单地使用正则表达式将action='(.*?)' 更改为您喜欢的任何内容。

String input = "<form name='oldvalue' action='old_value' method='get'>";
String newAction = "action='new_value'";
var s = Regex.Replace(input, "action='(.*?)'", newAction);

输出:

s: "<form name='oldvalue' action='new_value' method='get'>"

但是,如果实际是修改 HTML 文档,你一定要看看Html Agility Pack

【讨论】:

  • 返回action='old_value' method='get'
  • 他不是 - '(.*)' 将采用它可以匹配的最长字符串,并且因为 "."引用所有字符,包括将匹配 method='get' 的撇号
  • @Nacereddine 哎呀,看来你是对的,抱歉。让它不贪婪。
【解决方案3】:

看看 Regex.Replace 方法:http://msdn.microsoft.com/de-de/library/vstudio/xwewhkd1.aspx

应该是这样的

new Regex("action='.*?'").Replace(myline,"action='new_value'");

编辑:修复了 Nacereddine 建议的正则表达式

【讨论】:

  • 你也在替换method='get'。添加? 来修复您的正则表达式。
【解决方案4】:

尝试使用XmlDocument,如下所示。您还可以根据需要操作所有属性:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            XmlDocument doc = new XmlDocument();
            doc.LoadXml("<form name='oldvalue' action='old_value' method='get' />");
            foreach (XmlNode node in doc.GetElementsByTagName("form"))
            {
                node.Attributes["action"].Value = "new_value";
            }
            Console.Write(doc.OuterXml);
            Console.Read();
        }
    }
}

【讨论】:

  • Html 通常不是(可解析为)XML。 Html Agility Pack 在这方面做得更好。
【解决方案5】:

你可以这样做:

new Regex("action='([^\']*)'").Replace(myLine, "action='new_value'");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多