我正在尝试使用记事本++来匹配并获取我文件中最后一次出现的模式。
我的文字:
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"
我期望使用find-and-replace是这样的:
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
如何在比赛中获得最后一场比赛?我正在寻找获得最后一场比赛的一般方法。
答案 0 :(得分:1)
您可以匹配并捕获您需要保留的内容,只匹配您不需要的内容,并且仅在匹配捕获组时替换为文本:
查找内容:(?s)\b(X\d{2})(?:(?!X\d{2}).)*["\s]([^"\s]+\.dun)|(?:(?!X\d{2}).)*
替换为:(?{1}$1\t\t$2\n)
<强>详情:
(?s)
- DOTALL修饰符(您可以删除它并检查 .
匹配换行符选项)\b
- 在单词开头匹配X
的主要字词边界(X\d{2})
- 第1组捕获X
(请注意,如果您不想匹配小写x
,则必须启用匹配大小写)和任何两位数字(?:(?!X\d{2}).)*
- 一个匹配任何字符,零个或多个重复的驯化贪婪令牌,后面跟着X
和任意两个数字。由于它是贪婪的,它将使它到达下一个字符开始禁止序列的位置,并将回溯到后续子模式所需的最后一个“dun”。["\s]
- 空格或双引号([^"\s]+\.dun)
- 第2组捕获除空白和双引号之外的一个或多个字符,然后是一个点和dun
子字符串|
- 或(?:(?!X\d{2}).)*
- 与上面相同的顽固贪婪令牌。替换详情:
(?{1}
- 如果第1组匹配....
$1\t\t$2\n
- 替换为第一组值,两个标签,第二组值和换行符)
- 用空字符串替换。