Regex 从多个匹配中获取最后一个匹配
我正在尝试使用记事本++匹配并获取文件中最后出现的模式 我的文本:Regex 从多个匹配中获取最后一个匹配,regex,notepad++,match,negative-lookahead,Regex,Notepad++,Match,Negative Lookahead,我正在尝试使用记事本++匹配并获取文件中最后出现的模式 我的文本: X12 Source =asdjkasjd file="x/y1.dun" "x/y2.dun" "x/y3.dun" asds12 X22 p/q/xy.dun asda=23 source =asdf X44 1000 1001 file="abc.dun" 使用“查找和替换”时,我希望: X12 x/y3.dun X22
X12
Source =asdjkasjd
file="x/y1.dun"
"x/y2.dun"
"x/y3.dun"
asds12
X22
p/q/xy.dun
asda=23
source =asdf
X44
1000
1001
file="abc.dun"
使用“查找和替换”时,我希望:
X12 x/y3.dun
X22 p/q/xy.dun
X44 abc.dun
到目前为止,我所尝试的:
(X\d{2}).*?([^"\s]+dun)((?!X\d{2}).)*
替换为:
$1\t\t$2\n
但它返回给我的是:
X12 x/y1.dun //Which is the first match
X22 p/q/xy.dun
X44 abc.dun
如何在比赛中获得最后一场比赛?我正在寻找一种获得最后匹配的通用方法。您可以匹配并捕获需要保留的内容,只匹配不需要的内容,并且仅在匹配捕获组时替换为文本: 查找内容:
(?s)\b(X\d{2})(?:(!X\d{2})。*[“\s]([^”\s]+\.dun);(?:(!X\d{2})。*
替换为:
(?{1}$1\t\t$2\n)
看
详细信息:
-点调用修饰符(您可以删除它并选中(?s)
匹配换行选项)
-在单词开头匹配\b
的前导单词边界X
-组1捕获(X\d{2})
(请注意,如果不想匹配小写X
),则必须打开匹配大小写)和任意两位数字X
-匹配任何字符、零或多个重复的标记,后面不跟(?:(?!X\d{2})。*
和任何两位数字。由于它是贪婪的,它将到达下一个角色开始禁止序列的位置,并将回溯到后续子模式所需的最后一个“dun”X
-空格或双引号[“\s]
-第2组捕获除空格和双引号以外的一个或多个字符,然后捕获一个点和一个([^“\s]+\.dun)
子字符串dun
-或|
-与上面相同的令牌(?:(?!X\d{2})。*
-如果组1匹配。。。。(?{1}
-替换为第一组值、两个选项卡、第二组值和换行符$1\t\t$2\n
-否则替换为空字符串)
你的问题根本不清楚你想做什么。如果要替换文件中某个内容的最后一个实例,则可以将光标移动到该文件的底部,然后在“查找或替换”窗口中将
方向设置为向上。@GurV看起来相当复杂。你还在努力吗?我不能提供一个单步解决方案。您可以使用替换为$1\t\t$2\n
,然后删除“尾部”(上次匹配后剩余的部分)。@WiktorStribiżew-谢谢。这对我很有用。我可以手动移除一个尾部零件。你可以加上它作为答案,我会接受的。再次感谢:)完美的解决方案和解释。谢谢。:-)