首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >正则表达式中的命名组

正则表达式中的命名组
EN

Stack Overflow用户
提问于 2009-07-07 10:31:37
回答 4查看 337关注 0票数 1

我想解析输入字符串并从中提取值。我的输入字符串可能有周、天、小时或分钟。

所以,输入字符串可能是

  • 1周5天2小时1分钟
  • 或3分钟
  • 或5天1分钟
  • 或2小时等

我希望使用正则表达式提取值。

我如何在.Net中实现这一点?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-07-07 10:52:30

以下正则表达式匹配单数或复数(例如,天或天),只要项目按顺序排列。

代码语言:javascript
代码运行次数:0
运行
复制
//Set the input and pattern
string sInput = "1 Weeks 5 Days 2 Hours 1 Minutes";
string sPattern = "^\s*(?:(?<weeks>\d+)\s*(?:weeks|week))?\s*(?:(?<days>\d+)\s*(?:days|day))?\s*(?:(?<hours>\d+)\s*(?:hours|hour))?\s*(?:(?<minutes>\d+)\s*(?:minutes|minute))?";

//Run the match
Match oMatch = Regex.Match(sInput, sPattern, RegexOptions.IgnoreCase);

//Get the values
int iWeeks = int.Parse(oMatch.Groups["weeks"].Value);
int iDays = int.Parse(oMatch.Groups["days"].Value);
int iHours = int.Parse(oMatch.Groups["hours"].Value);
int iMinutes = int.Parse(oMatch.Groups["minutes"].Value);
票数 2
EN

Stack Overflow用户

发布于 2009-07-07 10:36:09

我认为使用正则表达式对此来说有点过分。如果我是您,我只会标记字符串,将其转换为小写,然后在不同的单词之间切换。这是一个更好的方法来处理你有固定的已知子字符串的情况。

票数 4
EN

Stack Overflow用户

发布于 2009-07-07 10:36:38

Regex中的捕获组包含在括号中(例如,"(\d+ Week)")。

命名捕获组使用问号和名称"(?<week>\d+ Week)"完成。

然后按如下方式返回它们,m.Groups("week").Value

完整的正则表达式(未经测试)可能如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
  (?<weeks>\d+ weeks?)\s*(?<days>\d+ days?)\s*(?<hours>\d+ hours?)\s*(?<minutes>\d+ minutes?)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1091558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档