正则表达式 - 如何用下划线替换文件名中的句点

3
我希望构建一个正则表达式,用于将文件名中的句点(.)替换为下划线(_)。
例如:将filename.doc替换为filename_doc。
我已经在Expresso中尝试过,并且已经确定它将类似于.\w{3,4},以获取3或4个字符的扩展名,例如doc、docx、xls、xlsx等。
但我无法弄清楚如何仅替换句点并保留扩展名。

3
为什么要使用正则表达式?几乎每种编程语言都支持简单的字符/字符串替换,比如像myString.replace('.', '_')这样的操作。 - scibuff
你想替换最后一个点还是所有的点? - Toto
通常我会按照你所描述的做法去处理,但是由于另一个系统有一些非常奇怪的限制,我只想替换文件名中包含的句点。 - Sean Taylor
你是说你有一些可能包含一些文件名的纯文本?哦,天哪,那像 jquery.js 这样的东西怎么办?你不能仅仅因为有一个点后面跟着3-4个字符就假设它是一个文件名。 - scibuff
2个回答

5

你需要转义.符号。尝试使用以下正则表达式:

\.(\w{3,4})$

现在替换为:

_$1

$1 包含了在 () 中匹配的字符串


我确实对句号进行了转义,但似乎已经从我的帖子中被剥离了?不过还是谢谢你的答案,我缺少的是$1。 - Sean Taylor

0

仅替换最后一个句点:

perl:  $str =~ s/\.([^.]+)$/_$1/

php: $str = preg_replace('/\.([^.]+)$/', "_$1", $str);

替换所有的点:

perl: $str =~ s/\./_/g;

php: $str = preg_replace('/\./', '_', $str);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接