首页 > 解决方案 > 如何使用正则表达式获取一个单词组合的第一部分和最后一部分

问题描述

如何使用 PCRE 正则表达式仅获取组合名称的中间部分?

姓名:211103_TV_storyname_TYPE

结果:storyname

我使用了这一行:.(\d)+.(_TV_) 删除第一部分:211103_TV_

另一个想法是使用(_TYPE)$,但问题是我在所有名称变体中都没有空间来声明第二个单词以使用 ^ 表示第一个单词,而 $ 表示第二个单词。

组合名称的变体是 _TYPE 和TV的修复。数字根据日期而变化。故事名称是可变的。有任何想法吗?

谢谢

标签: regexpcre

解决方案


对于您显示的示例,请尝试遵循正则表达式,这将创建一个包含匹配值的捕获组。

.*?_TV_([^_]*)(?=_TYPE)

或者(使用第四只鸟的好建议添加上述解决方案的一个小变体),以下没有.*?与上面不同的惰性匹配:

_TV_([^_]*)(?=_TYPE)

这是上述正则表达式的在线演示

说明:为上述添加详细说明。

.*?_      ##Using Lazy match to match till 1st occurrence of _ here.
TV_       ##Matching TV_ here.
([^_]*)   ##Creating 1st capturing group which has everything before next occurrence of _ here.
(?=_TYPE) ##Making sure previous values are followed by _TYPE here.

推荐阅读