0

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

这句话 :

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

预期结果 :

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

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

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

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

4

5 回答 5

5

您可以使用正则表达式

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);

更新:

此代码实际上返回<form name='oldvalue' new_value method='get'>

iedone正如@Nacereddine 提到的)

如果你想返回<form name='oldvalue' action='new_value' method='get'>使用这个:

Regex.Replace(myline, @"(action=')(.*?)(')", "$1"+new_value+"$3");
于 2012-10-20T13:02:13.820 回答
2

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

应该是这样的

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

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

于 2012-10-20T13:02:52.940 回答
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

于 2012-10-20T12:59:54.100 回答
0

你可以这样做:

new Regex("action='([^\']*)'").Replace(myLine, "action='new_value'");
于 2012-10-20T13:03:52.257 回答
0

尝试使用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();
        }
    }
}
于 2012-10-20T13:06:43.453 回答