代码之家  ›  专栏  ›  技术社区  ›  DaveDev

正则表达式-如何标识匹配字符串的子集

  •  0
  • DaveDev  · 技术社区  · 14 年前

    我对正则表达式非常陌生,我需要一种方法来标识匹配字符串的子集。

    我之前问过一个问题 how to parse a string to extract date range values . 我得到的一个答案非常有用,几乎给了我解决手头问题所需的一切。

    string pattern = @"\b(?<Year1>\d{4})(-(?<Year2>\d{2,4}))?\b";
    

    这个模式允许我在比较的字符串中标识第一年和第二年的子字符串 <Year1> <Year2> ,在代码中,我需要做的是:

    searchTermMatch.Groups["Year1"].Value

    2006-2007年第2期S12 RP

    我需要能够分离“ThingOne ThingTwo”(这只是字母字符-没有数字),就像我可以分离“2006”和“2007”一样。

    string pattern = @"\b(<FirstPart>?<Year1>\d{4})(-(?<Year2>\d{2,4}))?\b";
    

    但那没用。。所以我想看看是否有人能指出我如何才能达到我需要的结果?谢谢。

    1 回复  |  直到 7 年前
        1
  •  2
  •   John    7 年前
    @"^(?<FirstPart>.+?)(?<Year1>\d{4})(-(?<Year2>\d{2,4}))?\b"
    

    语法起作用是因为regexp中的匹配由括号表示。命名语法(BTW并非所有语言都支持)是 (?<name_of_match>pattern)

    • 第一部分 将匹配 .+?
    • 第一年 \d{4} =任意数字字符四次
    • 第二年 将匹配 \d{2,4} =任何数字重复2到4次

    还请注意添加的 ^ 字符在开始-意思是从行的开始。