我目前正在尝试删除此字符串中间的文字:
RenameMe_12345_12365_130706T234502.txt
使用以下正则表达式:
^[a-zA-Z]+(?=_[0-9]+_[0-9]+).+$
试图返回:
RenameMe_130706T234502.txt
但正则表达式返回整个字符串而不排除中间:
RenameMe_12345_12365_130706T234502.txt
我是否错误地使用了正面预测,或者我是否错误地接近了问题?可以通过这种方式使用积极的预测吗?
答案 0 :(得分:4)
替换此正则表达式:
_.*_
带
_
使用sed
工具的示例:
kent$ echo RenameMe_12345_12365_130706T234502.txt|sed 's/_.*_/_/'
RenameMe_130706T234502.txt
您可以使用自己的工具/编程语言来完成。
OP的评论编辑:
@CodingUnderDuress _.*_
是一个正则表达式(BRE)。它使用.*
贪婪的角色来实现您的目标。
如果您不想进行替换,只需使用正则表达式匹配您需要的部分,您就可以:
(^[^_]*|_[^_]*$)
用grep测试:( - E表示ERE)
kent$ echo "RenameMe_12345_12365_130706T234502.txt"|grep -Eo '(^[^_]*|_[^_]*$)'
RenameMe
_130706T234502.txt
如果你真的喜欢它们,你当然可以使用look-behind / ahead。那你需要PCRE。而且我不明白为什么我们需要在这里使用环顾四周来满足您的需求。
答案 1 :(得分:0)
您可以用空字符
替换此内容_(\w+(?=_))*
工作
[1] Match the character `_`
[2] followed a set of word characters
[3] I have used positive look-ahead `?=_` to make sure the last `_` is not missed out
[4] Match the above 0 or more times
答案 2 :(得分:0)
使用此
(?<=[^_])_\w+_(?=[^_]+)
匹配您要删除的部分。