我正在尝试解析一些日志以获取所查看项目的特定目录号。我已经打破了所有必要的字段,现在正在解析referer字段以获取所查看页面的目录ID。
字符串采用以下格式:
/catalog/AAA1111111
/catalog/BBB-22222-1/
/catalog/CCC-333333/XXX
http://url/catalog/DDD-44444444
http://url/catalog/EEE-555555555/ZZZ
我正在使用以下正则表达式删除目录ID:
.*\/catalog\/([^\/]+)
问题是我无法阻止正则表达式在下一个正斜杠后抓住所有内容。看起来好像是贪心?
结果是:
AAA1111111
BBB-22222-1/
CCC-333333/XXX
DDD-44444444
http:EEE-555555555/ZZZ
我一直在敲打这个问题几个小时。
我只是在寻找一个正则表达式,它只会拆分目录ID(目录/后面的字符串)。
任何人都可以帮助引导这位老编码员朝着正确的方向前进吗?
非常感谢。
答案 0 :(得分:1)
使用sed
cat catalogs | sed -E 's/.*\/catalog\/([^/]+)\/?.*/\1/g'
结果
AAA1111111
BBB-22222-1
CCC-333333
DDD-44444444
EEE-555555555
请注意,唯一的修改是匹配尾随的内容
答案 1 :(得分:0)
为什么在分割“/ catalog /”时使用正则表达式,取最后一项然后拆分为“/”并取第一项?
在Python中,可以这样做:
line.split('/catalog/')[-1].split('/')[0]
只是想指出regexp不是每个字符串解析问题的解决方案。 通常,当您面对“贪婪”解析时,在使用正则表达式之前进行“手动”修改有帮助