regex - 如何使用正则表达式获取一个单词组合的第一部分和最后一部分
问题描述
如何使用 PCRE 正则表达式仅获取组合名称的中间部分?
姓名:211103_TV_storyname_TYPE
结果:storyname
我使用了这一行:.(\d)+.(_TV_)
删除第一部分:211103_TV_
另一个想法是使用(_TYPE)$
,但问题是我在所有名称变体中都没有空间来声明第二个单词以使用 ^ 表示第一个单词,而 $ 表示第二个单词。
组合名称的变体是 _TYPE 和TV的修复。数字根据日期而变化。故事名称是可变的。有任何想法吗?
谢谢
解决方案
对于您显示的示例,请尝试遵循正则表达式,这将创建一个包含匹配值的捕获组。
.*?_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.
推荐阅读
- python - psycopg2 没有从元组参数中转义引号?使用 sql.SQL 格式化参数
- kotlin - 带 Int 的 ObjectBox 查询
- react-native - 如何开始使用 react-native-bootsplash
- django - 如何在多用户博客应用程序中定义用户详细信息视图?
- java - Java - 未找到 JSONObject
- reactjs - reactjs 事件处理程序语法
- python - Python 新手 - 为什么 self._ 在 Python 3 中导致 NameError
- image - 误删除VDI文件导致VERR_FILE_NOT_FOUND的VirtualBox出错
- c# - 为什么我的程序需要两行输入,为什么我的 GPA 计算错误 c#?
- log4j - Ignite Log4j 未将日志创建为 ignite.log