字符串模式分隔符

时间:2017-07-05 07:08:28

标签: c#

我有这段代码:

string first = "2-18;1-4; 5-212; 4-99" ;
Char delimiter = '-';

String pattern = @"\s?(\d+)([-])(\d+)";

我想知道是否有办法将分隔符放在模式中而不是([-])

3 个答案:

答案 0 :(得分:8)

您可以使用string interpolation

for (char a = 'A'; a <= 'Z'; a++) 
{ 
    Console.WriteLine(a);
}

string first = "2-18;1-4; 5-212; 4-99" ; Char delimiter = '-'; String pattern = $@"\s?(\d+)([{delimiter}])(\d+)"; 符号(必须位于$前面)可以使用@ {将变量(字符串)放入字符串中

注意:在旧版本的C#中,这不起作用

在这种情况下,您可以使用string.Format

}

这种方法的工作方式相同,但在string.Format(@"\s?(\d+)([{0}])(\d+)", delimiter);

之后使用数字占位符作为参数

Regex.Escape :(对NtFreX的信用)

此外,如果你正在使用正则表达式,你应该逃避你的角色(因为它们可能意味着正则表达式中的其他东西)。

,

答案 1 :(得分:2)

这是最简单的字符串连接。您有几种选择:

字符串连接:

Char delimiter = '-';

String pattern = @"\s?(\d+)([" + delimiter + "])(\d+)";

的String.format():

Char delimiter = '-';

String pattern = string.Format(@"\s?(\d+)([{0}])(\d+)", delimiter);

新样式格式(仅适用于较新的C#版本):

Char delimiter = '-';

String pattern = $@"\s?(\d+)([{delimiter}])(\d+)";

答案 2 :(得分:2)

另外我会使用Regex.Escape来逃避分隔符。

$@"\s?(\d+)([{Regex.Escape(delimiter)}])(\d+)";

例如,如果分隔符为.,则需要将其更改为\.,因为.是一个匹配任何字符的特殊正则表达式字符。其他角色也是一样的。