精品技术论坛

精品技术论坛 (https://bbs.et8.net/bbs/index.php)
-   『软件使用』 (https://bbs.et8.net/bbs/forumdisplay.php?f=17)
-   -   【求助】如何用正则匹配多个相同字符中的某一个? (https://bbs.et8.net/bbs/showthread.php?t=1373866)

netsonic 2019-08-23 22:11:48

【求助】如何用正则匹配多个相同字符中的某一个?
 
比如:A_B_C_D_E.mp4
如何匹配倒数第二个“_”?

namejm 2019-08-23 23:01:34

.+(_)[^_]*_[^_]*$

netsonic 2019-08-24 10:57:12

1 个附件
在TC里好像不行

namejm 2019-08-24 12:18:40

正则表达式如果只是“匹配”某个字符
2楼的表达式是没有任何问题的,括号对里能匹配到倒数第二个 _
但是你这里用正则表达式是为了改名
只要求 “匹配” 是远远不够的
你还得更进一步明确要保留什么、删除什么、替换掉什么

netsonic 2019-08-24 12:54:24

引用:

作者: namejm (文章 17413059)
正则表达式如果只是“匹配”某个字符
2楼的表达式是没有任何问题的,括号对里能匹配到倒数第二个 _
但是你这里用正则表达式是为了改名
只要求 “匹配” 是远远不够的
你还......

"替换"里是空的,表示删除匹配到的对象,但结果把整个文件名以及后缀都删了

dodowolf 2019-08-24 13:56:34

1 个附件
TC这么用

namejm 2019-08-24 18:12:40

关于验证正则表达式是不是匹配到了某个字符串
楼主可能存在一些误解
.+(_)[^_]*_[^_]*$ 这个正则表达式中
虽然整个表达式可能匹配了整个字符串,但是,其中的括号对匹配的是字符串中倒数第二个 _
你不能直接在 替换 中不做任何设置就期望能把倒数第二个 _ 提取出来
需要用 $1、$2之类的后向引用才能真正提取到
正则表达式是否正确匹配,不能简单地通过把 删除 操作置空来验证
如果要通过 删除 操作来验证,你需要进一步明确需要分别保留、替换、删除哪部分子字符串
然后进一步调整这个正则表达式原型
就像6楼演示的那样

netsonic 2019-08-24 21:11:41

感谢楼上各位解答。

llyang 2019-08-25 01:16:33

删除匹配倒数第二个_ //namejm查找是关键,替换如下:
UE
查找
(.+)[_]([^_]*_[^_]*$)
替换
$1$2


所有时间均为北京时间, 现在的时间是 01:22:14.

本论坛带宽由迅通网络提供
SSL证书由TrustAsia提供

Copyright © 2000 - 2019 ClassiClub Forum All Rights Reserved.
粤ICP备09123456号