在多个前缀后用空格匹配单词
本文关键字:空格 单词 前缀 | 更新日期: 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+))?