首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何匹配<>之间的字符串?

如何匹配<>之间的字符串?
EN

Stack Overflow用户
提问于 2019-05-30 17:09:13
回答 4查看 66关注 0票数 1

我试过\w+\:(\w+\-?\.?(\d+)?),但那不对

我有以下案文

代码语言:javascript
运行
复制
<staticText:HelloWorld>_<xmlNode:Node.03>_<date:yyy-MM-dd>_<time:HH-mm-ss-fff>

The end result I want is something like the following

["staticText:HelloWorld", "xmlNode:Node.03","date:yyy-MM-dd","time:HH-mm-ss-fff"]
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-05-30 17:40:31

您的模式与示例数据的第3部分和第4部分不匹配,因为在本部分中,\w+\-?\.?(\d+)?、破折号和数字只匹配一次,不重复。

对于示例数据,您可以使用字符类 [\w.-]+来匹配冒号后面的部分,以使匹配范围更广一些:

代码语言:javascript
运行
复制
<(\w+\:[\w.-]+)>

Regex演示 x- C#演示

或者,为了更具体,可以使用重复模式为Node.03部件和年份、月份、日期、小时等部件指定一个模式。

代码语言:javascript
运行
复制
<(\w+\:\w+(?:\.\d+|\d+(?:-\d+)+)?)>

解释

  • <匹配<
  • (捕获组
    • \w+\:\w+匹配1+单词字符、:和1+单词字符
    • (?:非捕获群
      • \.\d+匹配.和1+数字
      • |
      • \d+(?:-\d+)+匹配1+数字,重复1+时间匹配-和1+数字

代码语言:javascript
运行
复制
- `)?` Close non capturing group and make it optional

  • )闭捕获群
  • >

Regex演示 x- C#演示

票数 1
EN

Stack Overflow用户

发布于 2019-05-30 17:21:31

您可以使用以下正则表达式。

代码语言:javascript
运行
复制
<(.*?)>

然后看一看组是如何检索结果的。

代码语言:javascript
运行
复制
Regex rx = new Regex("<(.*?)>");
string text = "<staticText:HelloWorld>_<xmlNode:Node.03>_<date:yyy-MM-dd>_<time:HH-mm-ss-fff>";

MatchCollection matches = rx.Matches(text);
Console.WriteLine(matches.Count);

foreach(Match match in matches){
    var groups = match.Groups;
    Console.WriteLine(groups[1]);
}
票数 2
EN

Stack Overflow用户

发布于 2019-05-30 17:22:17

这一行应该能够匹配内容:

代码语言:javascript
运行
复制
<(.*?)>

它会抓住你似乎不想要的箭头,但你可以在没有正则表达式的情况下把它们移除。

你应该考虑一个像https://regexr.com这样的网站--通过允许你粘贴你的案例,看看它是如何与它们一起工作的,它可以成倍地帮助你编写regex。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56382683

复制
相关文章

相似问题

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