我有这段代码:
string first = "2-18;1-4; 5-212; 4-99" ;
Char delimiter = '-';
String pattern = @"\s?(\d+)([-])(\d+)";
我想知道是否有办法将分隔符放在模式中而不是([-])
?
答案 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+)";
例如,如果分隔符为.
,则需要将其更改为\.
,因为.
是一个匹配任何字符的特殊正则表达式字符。其他角色也是一样的。