字符串模式分隔符

San*_*mys 3 c#

我有这个代码:

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

String pattern = @"\s?(\d+)([-])(\d+)";
Run Code Online (Sandbox Code Playgroud)

而且我想知道是否有任何方法可以将分隔符放在模式中而不是([-])

Epi*_*Kip 8

你可以使用字符串插值:

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

String pattern = $@"\s?(\d+)([{delimiter}])(\d+)";
Run Code Online (Sandbox Code Playgroud)

$(其必须在前面符号@)使得有可能通过使用把一个变量(字符串)字符串中的{ }

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

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

string.Format(@"\s?(\d+)([{0}])(\d+)", delimiter);
Run Code Online (Sandbox Code Playgroud)

这工作方式相同,但在后面的参数使用数字占位符 ,


Regex.Escape :(致NtFreX的积分)

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

$@"\s?(\d+)([{Regex.Escape( delimiter.ToString() )}])(\d+)";
Run Code Online (Sandbox Code Playgroud)