如何用正则提取$数字后、下划线或行尾前的目标单词?
如何用正则提取所有行中的foobar?
需求场景
需要从以下行中提取指定单词foobar:
something_something_$20_foobar something_something_$20_foobar_something something_something_something_$20_foobar_something something_something_$1.5_foobar something_something_$1.5_foobar_something
已知规则
foobar必然出现在**下划线+带美元符号的数字(整数或浮点数)**之后,其后方要么是另一个下划线,要么是行尾。
之前尝试的问题
- 使用
\$.+_(.+)$:仅能匹配第1、4行的foobar - 使用
\$.+_(.+)_:仅能匹配第2、3、5行的foobar - 使用
\$.+_(.+)[$_]或\$.+_(.+)($|_):要么只能匹配部分行,要么匹配到错误内容
解决方案
可以使用这个正则表达式匹配所有行中的foobar:
\$\d+(?:\.\d+)?_(\w+)(?=_|$)
正则解释
\$:匹配美元符号(转义是因为$在正则中是行尾锚点)\d+(?:\.\d+)?:匹配整数或浮点数,(?:\.\d+)?表示可选的小数部分,(?:...)是非捕获组,不占用分组资源_:匹配数字后的下划线分隔符(\w+):捕获目标单词foobar(\w+匹配字母数字下划线,完全适配foobar的格式)(?=_|$):正向预查,确保foobar后方要么是下划线,要么是行尾,避免捕获后续多余内容
如果需要更精准的匹配(仅针对foobar),可以把捕获组改为精确匹配:
\$\d+(?:\.\d+)?_(foobar)(?=_|$)
内容的提问来源于stack exchange,提问作者LWC
相关产品推荐
相关产品推荐

