在多个前缀之后将单词与空格匹配

时间:2011-10-30 03:37:11

标签: c# regex preg-match

我有以下字符串

D_Doc Name L_Linked Doc Q_1_5

D_Doc Name L_Linked Doc Q_5

我很难创建一个匹配以下

的正则表达式
Doc Name
Linked Doc
1_5 or 5

D_Doc名称始终存在 L_和Q_不是

字符串也可能如下所示

D_Doc Name Doc Q_1_5
D_Doc Name Doc Q_5
D_Doc Name L_Linked Doc

我希望能够将比赛作为参考 匹配['DocName']或一些完整的含义,所以我知道找到哪个匹配,哪个不匹配。

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

如果我理解正确,你想要的正则表达式是这样的:

^D_(?<D>.*?)( L_(?<L>.*?))?( Q_(?<Q>.*))?$

它为某些测试输入产生以下结果:

Input                          D             L           Q 
D_Doc Name L_Linked Doc Q_1_5  Doc Name      Linked Doc  1_5
D_Doc Name Doc Q_1_5           Doc Name Doc              1_5
D_Doc Name Doc Q_5             Doc Name Doc              5
D_Doc Name L_Linked Doc        Doc Name      Linked Doc
D_Doc Name Doc Q_5             Doc Name Doc              5

答案 1 :(得分:0)

也许正则表达式对于这个问题有点太多了,我会使用一个简单的字符串.Split(s,'')然后我将逐个分析单词,也许用正则表达式代表最后一个单词。最后一句话也很容易分开。我想在编写代码时编写代码会更简单。

答案 2 :(得分:0)

您的要求有点难以破译,但我认为这样做会:

D_(\w+) (\w+) (L_(\w+) )?(\w+)( (Q_)?(\w+))?

如果你想添加“命名组”(我假设是合适的名字):

D_(?<Doc>\w+) (?<DocName>\w+) (L_(?<Linked>\w+) )?(?<LinkedDoc>\w+)( (Q_)?(?<Q>\S+))?

相关问题