【问题标题】:Smallest pattern for extracting string value using RegEx使用 RegEx 提取字符串值的最小模式
【发布时间】:2010-11-23 14:57:57
【问题描述】:

我正在尝试使用正确的模式实例化一个正则表达式,以便仅获取字符串的正确值。我的文本文件有:

Comment ID : 1234.5

我想得到正确的值如下:

1234.5

正确的正则表达式模式是什么?

这是我目前所拥有的

new Regex(@"^Comment ID\s*:\s*(?<comment_id>\w+)", RegexOptions.Multiline | RegexOptions.IgnoreCase); 

但这也带来了不需要的字符串“评论ID”

可以不使用组标记&lt;comment_id&gt; 吗?

【问题讨论】:

    标签: c# regex extraction


    【解决方案1】:

    您不必使用组名 - 但您必须通过索引来引用它们。 如果字符串的左边部分不能包含“:”,那么正则表达式可以是:

    ^[^:]+:\s*(.*?)\s*$
    

    另外,您可以使用实例 String.Split() 方法:

    "abc : def".Split(new[] { ':' }, 2)
    

    【讨论】:

    • 如果您在 char 上进行拆分,则无需将其放入数组中。对于chars,拆分是可变参数。
    • Matt,不在可以指定 count 参数的重载中。
    【解决方案2】:

    (?

    【讨论】:

    • 不错!这也有效:´new Regex(@"Comment\sID\s:\s(?\d+)", RegexOptions.IgnoreCase);´
    【解决方案3】:

    如果您不关心 : 剩下的内容,您可以使用:

    "^.*:\s*(?<comment_id>\w+)"
    

    您也不需要为此使用RegexOptions,因为没有字符串可以忽略大小写

    【讨论】:

    • 确实左边部分总是固定的(常量词),如“评论 ID”。它就像一个字段名。
    • 所以.*: 将匹配包括: 在内的所有内容,并且会满足您的需要
    【解决方案4】:

    您提供的正则表达式 "^Comment ID\s*:\s*(?&lt;comment_id&gt;\w+)" 与点后的数字不匹配

    尝试使用这个: (?!^Comment ID\s*:\s*)(?&lt;comment_id&gt;\d+\.*\d*)

    您还可以将评论 ID 更改为任何单词或 \w+

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-18
      • 1970-01-01
      • 2022-01-18
      • 2012-07-07
      • 2011-07-02
      相关资源
      最近更新 更多