c# - 在 C# 的正则表达式中,前导和尾随破折号不匹配
问题描述
我想匹配字母数字或破折号(“-”)字符。
@"\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
谢谢
解决方案
据我所知,这种模式应该可以工作:
[a-zA-Z0-9\-]{5}
您只需定义一个包含字母数字字符和破折号的字符类,然后查找多个组合在一起的字符(在本例中为 5 个)...这将返回 -1234、123-4、1234- 等。
推荐阅读
- java - 递归解析计算器java
- android - SwipeRefreshLayout 指示器没有加载圆圈箭头
- javascript - 在 Node JS 服务器上显示来自 MongoDB 查询的 $sum 的结果
- typescript - 如何在打字稿中不使用选项(?)删除属性
- kiwi-tcms - 从 testopia 迁移时,在 KIWI TCMS 中为某些测试用例获取“AttributeError at /case/57286/”
- javascript - 模板组件上的 vuejs onclick 行为
- javascript - Processing.js 无法访问全局 JavaScript 变量
- angular - Angular Material Dialog 不需要的内联样式
- git - 如何跳过“git am”中的冲突文件
- html - 为什么刷新浏览器图像响应状态是200,而不是304?