正则表达式在缺少某些字符串部分时提取多个部分

时间:2014-02-04 10:11:20

标签: regex c#-4.0

我正在尝试创建一个正则表达式,它将捕获字符串的几个部分。这是我创建的表达式:

([0-9]{6}[-*][0-9xX]{7}).*([0-9]{1,3}-[0-9]{1,3}-[0-9]{1,3}).*([FPTSUCD])=?([01][*-])

它运行的字符串可以以两种不同的样式出现:

@ 141803-6310114 @3-0-2 T0-jL

或者

]@0-7-4 C1-vU

当我使用第一个字符串时,我得到了我需要的所有部分。

141803-6310114
3-0-2
T
0-

当我使用第二个字符串时,我没有匹配。第二次刺痛基本与第一次刺痛相同,但没有这部分“141803-6310114”。我希望表达式适用于两个字符串,但数字序列是可选的。任何人都可以建议表达式应该是什么样的吗?

1 个答案:

答案 0 :(得分:1)

这将在两种情况下为您提供部件:

(?:(\d{6}[-*][\dxX]{7}))?[^\d]*(\d{1,3}-\d{1,3}-\d{1,3}) ([FPTSUCD])=?([01][*-])

使第一组可选(?)并将前两组之间的“全吃”改为“吃所有非数字”+其他清理以使其更具可读性(至少对我来说)。) / p>

此致