在多个前缀后用空格匹配单词

本文关键字:空格 单词 前缀 | 更新日期: 2023-09-27 18:12:50

我有以下字符串

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 Name始终存在L_和Q_不

字符串也可以像下面这样

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

我希望能够引用匹配为match['DocName']或一些完整的含义,以便我知道找到了哪些匹配,哪些没有。

有什么建议吗?

在多个前缀后用空格匹配单词

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

^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

也许正则表达式对于这个问题有点太多了,我会使用一个简单的字符串。拆分(s, ' '),然后逐个分析单词,也许最后一个单词使用正则表达式。然而,最后一个词也很容易分裂。我想这将是更简单的编写你的代码只是工作在一个数组。

您的要求有点难以理解,但我认为这样可以:

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

,如果你想添加"命名组"(我认为是适当的名称):

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