我想匹配字母数字或破折号(“-”)字符。
我的@"\b(?<alphaOrDash>[\-\w]{5})\b"
天真模式似乎与字母数字破折号字符串匹配,只要破折号不是开头或结尾的破折号即可。
谁能给我我这个难题的见解。我的期望是,前导或尾随的破折号没有什么区别,我应该能够匹配前导和尾随的破折号。我哪里出问题了?
体现上述问题的代码(我在LINQPad中编写了此代码,而在VS2017中得到了相同的结果):
var textDashInMiddle = "123-4";
var patMatch5 = @"\b(?<fiveChars>[\-\w]{5})\b";
var reMatch5 = new Regex(patMatch5);
var match5 = reMatch5.Match(textDashInMiddle);
if (match5.Success)
Console.WriteLine($"1. {match5.Groups["fiveChars"].Value}");
else
Console.WriteLine("1. No success");
var textDashAtEnd = "1234-";
match5 = reMatch5.Match(textDashAtEnd);
if (match5.Success)
Console.WriteLine($"2. {match5.Groups["fiveChars"].Value}");
else
Console.WriteLine("2. No success");
var textDashInTheBeginning = "-1234";
match5 = reMatch5.Match(textDashInTheBeginning);
if (match5.Success)
Console.WriteLine($"3. {match5.Groups["fiveChars"].Value}");
else
Console.WriteLine("3. No success");
var patMatchAll = @"\b(?<fiveChars>[\-\w]+)\b";
//var patMatchAll = @"\b(?<fiveChars>(\-|\w)+)\b";
var reMatchAll = new Regex(patMatchAll);
var matchAll = reMatchAll.Match(textDashInMiddle);
if (matchAll.Success)
Console.WriteLine($"4. {matchAll.Groups["fiveChars"].Value}, {matchAll.Groups["fiveChars"].Value.Length}");
else
Console.WriteLine("4. No success");
matchAll = reMatchAll.Match(textDashAtEnd);
if (matchAll.Success)
Console.WriteLine($"5. {matchAll.Groups["fiveChars"].Value}, {matchAll.Groups["fiveChars"].Value.Length}");
else
Console.WriteLine("5. No success");
matchAll = reMatchAll.Match(textDashInTheBeginning);
if (matchAll.Success)
Console.WriteLine($"6. {matchAll.Groups["fiveChars"].Value}, {matchAll.Groups["fiveChars"].Value.Length}");
else
Console.WriteLine("6. No success");
运行上述代码的结果是:
1. 123-4
2. No success
3. No success
4. 123-4, 5
5. 1234, 4
6. 1234, 4
谢谢
答案 0 :(得分:0)
据我所知,这种模式应该可以工作:
[a-zA-Z0-9\-]{5}
您只需定义一个包含字母数字字符和破折号的字符类,然后查找多个分组在一起的字符(本例中为5)...这将返回-1234、123-4、1234-等..
答案 1 :(得分:0)
@madreflection在我将RE工作的边界字符(\ b)更改为(^)n($)时是正确的。到达那里后,我将检查我的工作表达。
谢谢大家