2012-07-06 88 views
0

这是previous question的后续操作。我有一个字符串“测试999-99-9”,除了最后的-9部分之外,我会如何匹配?请记住,最后的-9可能会或可能不会在那里,但如果是这样,我想忽略它并匹配其余的字符串。有什么建议么?正则表达式 - 排除部分字符串

或者,如果它忽略了整个999-99-9或999-99部分,只是返回了“测试”部分,那也可以。这似乎可能更容易做到。我基本上想要采取以下表达式并将其反转以返回字符串的另一半:(\ d {3} - \ d {2} | \ d {3} - \ d {2} - \ d {1} )$

+0

哪种语言? – kapa 2012-07-06 13:43:57

+0

请张贴一些可能的输入和相应的所需输出 – heltonbiker 2012-07-06 13:44:10

+0

好吧,就像我上面解释的那样,如果输入是“测试999-99”或“测试999-99-9”,我只想输出“测试999- 99“(如果存在,则忽略最后的-9)。或者,正如我在第二段中解释的那样,如果它只是返回“测试”,那也可以(我可以使用我已经写过的不同表达式来分离999-99模式)。请记住,字符串的字符部分可能不止一个单词,如果这有所作为。 – tjc59 2012-07-06 13:49:26

回答

1

正则表达式忽略999-99-9,就回到 “测试” 部分:

^([\w ]+) [\d]{3}-[\d]{2}-?[\d]?$ 

OCR软件支持组:

http://www.laserfiche.com/NewsPortal/Article/2012/05/21/tech-tip-pattern-matching-with-regular-expressions

注:括号确定哪些信息是从 中提取的文字。其他字符决定了寻找 的模式。例如,\ d \ d \ d- \ d \ d - (\ d \ d \ d \ d)将找到社会安全号码并返回它的最后四位数字。

+0

我在http://regexpal.com/测试这个,它似乎返回整个字符串,而不仅仅是第一部分。 – tjc59 2012-07-06 13:58:47

+0

它匹配整个字符串,但只返回“Test”部分作为组1,您可以使用$ 1访问大多数正则表达式系统 – 2012-07-06 14:03:14

+0

我想我不熟悉组或者如何访问它们。我只是将1美元贴到表达式的末尾?另外,“测试”部分可以是多个词;我不确定这是否会匹配多个单词。对困惑感到抱歉。 – tjc59 2012-07-06 14:10:16

0

^(Test \d{3}-\d{2})(-\d{1})?$将从您的示例中返回除最后一个“-9”以外的所有内容,无论是否存在“-9”。

+0

当我测试它时,无论如何,这似乎都会返回所有内容。此外,“测试”一词不是静态的;它可能是一系列不同的单词。我基本上试图对与999-99或999-99-9模式不匹配的所有内容进行反向匹配。 – tjc59 2012-07-06 13:54:27

+0

这是令人恐惧的RegEx。你完全匹配“测试”这个词,并且你匹配最后的9个,但把它当作第二个组。 – 2012-07-06 13:56:51