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

时间:2010-11-06 14:39:11

标签: regex language-agnostic

我对正则表达式非常不熟悉,我需要一种方法来识别匹配字符串的子集。

之前我问了一个关于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

但是,我现在需要识别字符串的第一部分。所以如果字符串是

  

ThingOne ThingTwo 2006-2007 S12 RP

我需要能够将“ThingOne ThingTwo”(这只是字母字符 - 没有数字)与“2006”和“2006”相同。 “2007”。

我已尝试将模式更改为

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

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

1 个答案:

答案 0 :(得分:2)

@"^(?<FirstPart>.+?)(?<Year1>\d{4})(-(?<Year2>\d{2,4}))?\b"

语法有效,因为Regexp中的匹配用括号表示。命名语法(所有语言都不支持BTW)是(?<name_of_match>pattern)。所以这里我们得到三个命名匹配:

  • FirstPart 将匹配.+? =任何重复一次但不多次的角色
  • Year1 将匹配\d{4} =任意数字字符四次
  • Year2 将匹配\d{2,4} =重复两到四次的任何数字

还要注意在开头添加的^字符 - 它表示从该行的开头开始。