使用REGEX c#将多个数字替换为字符串中的其他数字

时间:2015-06-14 23:09:05

标签: c# regex string

所以我在下面有数百行(我修剪了很多),我想捕获DEFAULT值并设置为0.99但是只有WITH <Movement display_name="Movement类型的行可以是会话或系统,独立于类型和min和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);
}

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

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

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

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

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

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

我在这里做的是保留捕获的群组,只替换未捕获的值:"$1<replacement>$2"。可以通过$<group>引用来访问捕获的组。

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