吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 402|回复: 7
收起左侧

[经验求助] 求一个文本处理的正则表达式

  [复制链接]
wapjltb 发表于 2024-4-2 18:03
40吾爱币
文本内容如下:
(;RU[cn]SZ[19]KM[7.5]HA[0];B[pd];W[cq];B[qp];W[dc];B[ce];W[op];B[oq];W[nq];B[pq];W[np];B[qn];W[fd];B[jp];W[fp];B[nm];W[po];B[pn];W[ln];B[hq];W[ci];B[qf];W[lp];B[fr];W[eq];B[kq];W[pg];B[qg];W[pi];B[nj];W[ng];B[md];W[qh];B[qj];W[ok];B[ml];W[pf];B[pe];W[ri];B[ql];W[nk];B[mk];W[mj];B[ko];W[km];B[jl];W[jm];B[ni];W[lj];B[mh];W[mg];B[lk];W[kj];B[lh];W[pj];B[jj];W[ji];B[ij];W[ld];B[kk];W[hm];B[me];W[lg];B[ki];W[kh];B[mi];W[le];B[lc];W[qc];B[pc];W[pb];B[rc];W[kc];B[mc];W[kb];B[oh];W[ph];B[kd]PB[王星昊]PW[姜东润])

我想要把后面的“PB[王星昊]PW[姜东润]”移到前面“[19]”后面,如下所示:
(;RU[cn]SZ[19]PB[王星昊]PW[姜东润]KM[7.5]HA[0];B[pd];W[cq];B[qp];W[dc];B[ce];W[op];B[oq];W[nq];B[pq];W[np];B[qn];W[fd];B[jp];W[fp];B[nm];W[po];B[pn];W[ln];B[hq];W[ci];B[qf];W[lp];B[fr];W[eq];B[kq];W[pg];B[qg];W[pi];B[nj];W[ng];B[md];W[qh];B[qj];W[ok];B[ml];W[pf];B[pe];W[ri];B[ql];W[nk];B[mk];W[mj];B[ko];W[km];B[jl];W[jm];B[ni];W[lj];B[mh];W[mg];B[lk];W[kj];B[lh];W[pj];B[jj];W[ji];B[ij];W[ld];B[kk];W[hm];B[me];W[lg];B[ki];W[kh];B[mi];W[le];B[lc];W[qc];B[pc];W[pb];B[rc];W[kc];B[mc];W[kb];B[oh];W[ph];B[kd])

最佳答案

查看完整内容

匹配模式:(.+SZ\[19\])(.+)(PB\[王星昊\]PW\[姜东润\]) 替换模式:\1\3\2 解释 (.+SZ\[19\]):这个分组匹配开始到“SZ[19]”的所有字符。(.+)表示匹配除换行符以外的所有字符,尽可能多地匹配。 (.+):这个分组匹配“SZ[19]”之后到“PB[王星昊]PW[姜东润]”之前的所有字符。 (PB\[王星昊\]PW\[姜东润\]):这个分组直接匹配“PB[王星昊]PW[姜东润]”部分。 \1、\3、\2:这些是替换模式中的反向引用,分别对应上面的三个分组 ...

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

syd1990 发表于 2024-4-2 18:03
匹配模式:(.+SZ\[19\])(.+)(PB\[王星昊\]PW\[姜东润\])
替换模式:\1\3\2
解释
(.+SZ\[19\]):这个分组匹配开始到“SZ[19]”的所有字符。(.+)表示匹配除换行符以外的所有字符,尽可能多地匹配。
(.+):这个分组匹配“SZ[19]”之后到“PB[王星昊]PW[姜东润]”之前的所有字符。
(PB\[王星昊\]PW\[姜东润\]):这个分组直接匹配“PB[王星昊]PW[姜东润]”部分。
\1、\3、\2:这些是替换模式中的反向引用,分别对应上面的三个分组。通过调整它们的顺序,你可以重组文本。
 楼主| wapjltb 发表于 2024-4-3 09:25
syd1990 发表于 2024-4-3 08:37
匹配模式:(.+SZ\[19\])(.+)(PB\[王星昊\]PW\[姜东润\])
替换模式:\1\3\2
解释

不错,测试成功。但是“王星昊”和“姜东润”这些名字不是固定的,有些是二个字的,这个怎么处理?
bloodmarry12 发表于 2024-4-3 09:41
wapjltb 发表于 2024-4-3 09:25
不错,测试成功。但是“王星昊”和“姜东润”这些名字不是固定的,有些是二个字的,这个怎么处理?

使用 (.+SZ\[19\])(.+)(PB\[.*?\]PW\[.*?\])

.*?表示任意数量任意字符
 楼主| wapjltb 发表于 2024-4-3 10:19
bloodmarry12 发表于 2024-4-3 09:41
使用 (.+SZ\[19\])(.+)(PB\[.*?\]PW\[.*?\])

.*?表示任意数量任意字符

这个已经测试不行,还是用2楼的方法改进后解决了。
syd1990 发表于 2024-4-3 10:57
wapjltb 发表于 2024-4-3 09:25
不错,测试成功。但是“王星昊”和“姜东润”这些名字不是固定的,有些是二个字的,这个怎么处理?

(.+SZ\[19\])(.+?)(PB\[[^\]]+\]PW\[[^\]]+\])

使用了[^\]]+来匹配任意数量的非]字符,这样可以匹配任意长度的名字。

替换模式不需要变
 楼主| wapjltb 发表于 2024-4-3 11:36
syd1990 发表于 2024-4-3 10:57
(.+SZ\[19\])(.+?)(PB\[[^\]]+\]PW\[[^\]]+\])

使用了[^\]]+来匹配任意数量的非]字符,这样可以匹配任 ...

经过测试,这个匹配模式没有成功,整个文本文件变成3字节。
我是用这个改进后的匹配模式:(.+SZ\[19\])(.+)(PB.+\])(PW.+\])
替换模式:\1\3\4\2解决了问题。
感谢你的帮助
syd1990 发表于 2024-4-3 12:06
wapjltb 发表于 2024-4-3 11:36
经过测试,这个匹配模式没有成功,整个文本文件变成3字节。
我是用这个改进后的匹配模式:(.+SZ\[19\])( ...

OK,搞定就好
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-15 10:01

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表