【问题标题】:Replace multiple numbers with other numbers in a string using REGEX c#使用REGEX c#将多个数字替换为字符串中的其他数字
【发布时间】:2015-08-30 09:04:48
【问题描述】:

所以我在下面有数百条这样的行(我修剪了很多),我想捕获 DEFAULT 值并设置为 0.99 但只有 WITH <Movement display_name="Movement 的行类型可以是会话或系统,与类型和最小值无关max,我是 REGEX 的新手,这是我能做的最好的,但这不是我想要的,我知道 regex 中存在替换但我无法完成第一部分,请帮助

真的 真的 错误的 真的 错误的 真的 错误的 真的 错误的 真的 错误的 真的 错误的 真的 错误的 红色的 蓝色 黄色的 绿色 白色的 浅灰色 深灰色 纯红 橘子 浅蓝色 深蓝 品红 浅绿色

    <!--Default Values-->
    <Indexed display_name="Indexed" type="system" datatype="pos_int" max="4" min="1" security_level="SU"
     default_value="2" />
    <IndexingColor1 display_name="IndexingColor1" type="system" datatype="list" security_level="SU"
     default_value="RED">

<Cube>
    <ShowFrame display_name="ShowFrame" type="system" datatype="list" security_level="CU" 
     default_value="true">
        <list>
            <ListItem>true</ListItem>
            <ListItem>false</ListItem>
        </list>
    </ShowFrame>
    <ShowFixedPoint display_name="ShowFixedPoint" type="system" datatype="list" security_level="CU" 
     default_value="true">
        <list>
            <ListItem>true</ListItem>
            <ListItem>false</ListItem>
        </list>
    </ShowFixedPoint>
    <FixedPointPosition display_name="FixedPointPosition" type="system" datatype="list" security_level="AU" 
     default_value="0">
        <list>
            <ListItem>-1</ListItem>
            <ListItem>-0.5</ListItem>
            <ListItem>0</ListItem>
            <ListItem>0.5</ListItem>
            <ListItem>1</ListItem>
        </list>
<Timing>
            <FirstPresentation display_name="FirstPresentation" type="system" datatype="float" max="0.0" min="0.0" security_level="CU" 
             default_value="0.0" />
            <Indexing display_name="Indexing" type="system" datatype="float" max="0.0" min="0.0" security_level="CU" 
             default_value="0.0" />
            **<Movement display_name="Movement" type="system" datatype="float" max="0.0" min="0.0" security_level="CU" 
             default_value="0.0" />**
            <Pause display_name="Pause" type="system" datatype="float" max="0.0" min="0.0" security_level="CU" 
             default_value="0.0" />
            <Feedback display_name="Feedback" type="system" datatype="float" max="0.0" min="0.0" security_level="CU" 
             default_value="0.0" />
            <Answer display_name="Answer" type="system" datatype="float" max="0.0" min="0.0" security_level="CU" 
             default_value="0.0" />
            <AutoValidate display_name="AutoValidate" type="system" datatype="float" max="0.0" min="0.0" security_level="CU" 
             default_value="0.0" />
        </Timing>

MatchCollection Collections = Regex.Matches(parameters, "<Movement display_name=\"Movement\" type=\"(<type> .*?).*? min=\"(<min> .*?) .*? max=\"(<max> .*?)\" />", RegexOptions.Singleline);

foreach(Match match in Collections)
{
     Console.WriteLine(match.Groups["type"].Value);
     Console.WriteLine(match.Groups["max"].Value);
}

【问题讨论】:

标签: c# regex string


【解决方案1】:

您可以像这样使用正则表达式:

max=".*?" 

并使用替换字符串:

max="0.99"

Working demo

string input = "YOUR STRING HERE";

Regex rgx = new Regex("max=\".*?\"");
string result = rgx.Replace(input, "max=\"0.99\"");

Console.WriteLine("Original String: {0}", input);
Console.WriteLine("Replacement String: {0}", result);

【讨论】:

  • 感谢您的帮助,但我没有很好地解释(而且我是 stackoverflow 的新手)字符串(xml)很长,因为您可以看到有很多默认数字(default="123")我只想更改那些包含 -- --------或--------- 如果您可以为两者编写一个泛型,并且仅为 type="session" 编写一个泛型,我将不胜感激
  • 谢谢,你们教我怎么做,我会尽快发布答案
【解决方案2】:

正如您提到的,您需要捕获和替换 max 值,我将只考虑非捕获组

特殊字符\s+用于表示一个或多个空格。

Regex reg = new Regex("(Movement\s+display_name=\"Movement\"\s+type=\".*\" .*min=\".*\"\s+max=\").*(\")");

现在您可以替换未捕获的组,我的意思是“最大”值:

reg.Replace(textToSearch, "$10.99$2");

我在这里所做的是保留捕获的组,并且只替换未捕获的值:"$1&lt;replacement&gt;$2"。捕获的组可以通过$&lt;group&gt;的引用访问。

您可以在此处测试您的正则表达式http://regexr.com/

【讨论】:

  • 感谢您的帮助,字符串(xml)很长,因为您可以看到有很多默认数字(default="123")我只想更改包含 的数字粗体****bold - --------或--------- bold****bold 如果你能写一个泛型,只用于 type="session" @jherax,我将不胜感激
  • 我提供的答案符合您第一次发布时的问题标准。现在您已经编辑了问题。您可以先标记正确答案,然后编辑您的帖子以添加新标准。请添加一个 EDITED 部分以更清晰。
  • 谢谢,你们教我怎么做,我会尽快发布答案
猜你喜欢
  • 2021-11-02
  • 2013-03-14
  • 1970-01-01
  • 2013-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多