求助:如何提取字符串中#####之后、末尾/之前的内容?
解决方案
你之前用的正则/[^#####]*[^\/]/逻辑不对:[^#####]是字符集,里面重复的#没有意义,实际作用是匹配除#之外的任意字符,完全不符合你要提取#####后内容的需求,所以无法得到预期结果。
下面给你几个可行的正则方案,按需选择:
方案1:正向预查匹配(无需分组)
正则表达式:
(?<=#####).*(?=/)
- 解释:
(?<=#####):正向预查,确保目标内容前面是连续5个#.*:匹配任意非换行字符,直到遇到结尾的/(?=/):正向预查,确保目标内容后面是/,不会把/包含到结果里
方案2:捕获分组(适合支持分组的工具/语言)
正则表达式:
#####(.*)/
- 解释:
- 先匹配固定的
#####,再用(.*)捕获后面直到/的所有内容,最后匹配结尾的/ - 使用时直接提取第1个捕获组的内容即可
- 先匹配固定的
实际使用示例
比如用sed命令处理文本文件:
sed 's/.*#####\(.*\)\/$/\1/' input.txt
或者用Python代码处理字符串列表:
import re strings = [ "some-text-123123#####abcdefg/", "some-STRING-413123#####qwer123t/", "some-STRING-413123#####456zxcv/" ] pattern = re.compile(r"(?<=#####).*(?=/)") for s in strings: print(pattern.search(s).group())
执行后就能得到你想要的结果:
abcdefg qwer123t 456zxcv
内容的提问来源于stack exchange,提问作者hirohy
相关产品推荐
相关产品推荐

