【问题标题】:How to match a string between <>?如何匹配<>之间的字符串?
【发布时间】:2019-10-16 08:54:51
【问题描述】:

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

我有以下文字

<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"]

【问题讨论】:

  • 你能采用x.Replace("&gt;_&lt;", "\",\"") 的简单方法加上修剪开始/结束吗?
  • 尝试使用: 我不明白你为什么需要这种特定格式:["staticText:HelloWorld", "xmlNode:Node.03","date: yyy-MM-dd","时间:HH-mm-ss-ff"]

标签: c# regex regex-lookarounds regex-group


【解决方案1】:

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

<(.*?)>

然后看看组如何工作来检索结果。

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】:

    这一行应该能匹配内容:

    <(.*?)>
    

    它会在末尾捕获您似乎不想要的箭头,但您可以在没有正则表达式的单词之后删除它们。

    您应该考虑使用像 https://regexr.com 这样的网站 - 它允许您粘贴您的案例并查看它如何与它们一起使用,从而极大地帮助您编写正则表达式。

    【讨论】:

      【解决方案3】:

      匹配 中的任何字符串。希望这会有所帮助。

      【讨论】:

        【解决方案4】:

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

        对于您的示例数据,您可以使用 character class [\w.-]+ 来匹配冒号后面的部分,以使匹配更广泛:

        <(\w+\:[\w.-]+)>
        

        Regex demo | C# demo

        或者更具体一点,使用重复的模式为 Node.03 部分和年月日小时等部分指定模式。

        <(\w+\:\w+(?:\.\d+|\d+(?:-\d+)+)?)>
        

        说明

        • &lt;匹配&lt;
        • (抓包组
          • \w+\:\w+ 匹配 1+ 个单词字符,: 和 1+ 个单词字符
          • (?:非捕获组
            • \.\d+ 匹配 . 和 1+ 位
            • |或者
            • \d+(?:-\d+)+ 匹配 1+ 个数字并重复 1+ 次匹配 - 和 1+ 个数字
          • )?关闭非捕获组并使其可选
        • )关闭捕获组
        • &gt;

        Regex demo | C# Demo

        【讨论】:

        • 欣赏详细解答。
        猜你喜欢
        • 2020-11-13
        • 2013-12-28
        • 1970-01-01
        • 2019-07-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-29
        • 2010-12-25
        • 2013-04-26
        相关资源
        最近更新 更多