gpt4 book ai didi

Java RegEx - 如何防止一行特殊字符被另一个字符替换?

转载 作者:行者123 更新时间:2023-11-29 10:09:54 25 4
gpt4 key购买 nike

我想用正则表达式 (Regex) 做的基本上是 opposite to this request .

我目前使用这种模式来创建 URL 兼容的文件名:

String new_file_name = old_file_name.replaceAll("[^a-zA-Z0-9._]+", "_"); 

如果有例如例子

String old_file_name = "!§$%&{}[]()=´´```_lol_á_^_°.PNG";

然后 new_file_name 将是以下具有上述模式的:__lol______.PNG

但是,我想以不同的方式拥有它。这个正则表达式模式只用一个下划线删除了整行连续的特殊字符,但我希望该模式用它自己的下划线替换每个单独出现的特殊字符,这会给我这个结果:

__________________lol______.PNG 

有没有办法用正则表达式实现这个?

回答后编辑:
感谢你们精彩的回答!真的帮了我很多!为了完整起见,我想为您提供我笨拙且笨拙的代码片段,我用它获得了与您所说的正则表达式相同的结果:

  for(int i = 0; i < old_file_name.length(); i++)
{
// if it is a letter, a number, a underscore or a dot
if( (((int)old_file_name.charAt(i) > 47) && ((int)old_file_name.charAt(i) < 58 )) ||
(((int)old_file_name.charAt(i) > 64) && ((int)old_file_name.charAt(i) < 91 )) ||
(((int)old_file_name.charAt(i) > 96) && ((int)old_file_name.charAt(i) < 123 )) ||
((int)old_file_name.charAt(i) == 95) ||
((int)old_file_name.charAt(i) == 46) )
{

// do nothing
} // end if
else
{
new_file_name = new_file_name.replace(old_file_name.charAt(i), '_');

// System.out.println("Step " + i + " : " + new_file_name); // for debugging
} // end if-else
} // end for

最佳答案

您必须删除末尾的 + [^a-zA-Z0-9._] 以便您可以使用:

String new_file_name = old_file_name.replaceAll("[^a-zA-Z0-9._]", "_");
//-------------------------------------------------------------^

输出

__________________lol______.PNG 

因为 + 表示匹配一次或多次。但在您的情况下,您需要替换所有它们,因此您不需要 +.

关于Java RegEx - 如何防止一行特殊字符被另一个字符替换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44334435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com