我有一些数百万行的文件,其中包含以下内容:
9/9/2015 2:50:39 PM: Export for https://portal.gaf.com/sites/RCNHistory/Lists/RCNs/Attachments/148/Ruberoid HW Plus SV.xls Complete.
9/9/2015 2:50:39 PM: Export for https://portal.gaf.com/sites/RCNHistory/Lists/RCNs/Attachments/148/Ruberoid Mop Granule SV.xls Complete.
9/9/2015 2:50:40 PM: Export for https://portal.gaf.com/sites/RCNHistory/Lists/RCNs/Attachments/148/Ruberoid Mop Smooth 1.5 SV.xls Complete.
我希望在每一行上捕获文件名,后面带有以下内容:
$(?<=\/)
当然,我必须删除&#34;完成。&#34;但我觉得我慢慢开始
但我还没有掌握正则表达的艺术。谁能让我知道我做错了什么?
谢谢。
答案 0 :(得分:1)
答案 1 :(得分:1)
如果线条全部采用此格式,则无需使用lookbehind复杂化。 你可以使用贪婪的匹配来获得你想要的东西。
.*\/(.*) Complete.
本质上是:
将所有内容(包括/ s)与/后跟一些文本(在本例中为您的文件名)匹配,后跟文字“完成”。
匹配组包含文件名。
因此,对于N ++中的正则表达式查找和替换,您应该使用:
查找
.*\/(.*) Complete.
替换
$1
这将为您留下每行的文件名。
答案 2 :(得分:0)
Lookbehind是一个位置的零宽度断言。这不是告诉正则表达式从哪里开始的方式 - 它必须始终从头开始。您可以使用像.*/(.*) Complete
这样的正则表达式捕获它。
如果你正在使用shell,那么cut
工具也很适合。
# get everything after the last slash and before the last space (` Complete`)
rev $INPUT_FILE | cut -d'/' -f 1 | cut -d' ' -f2- | rev
答案 3 :(得分:0)