如何编写正则表达式来过滤掉非英语字符

时间:2010-12-13 10:36:13

标签: regex linux

我有一堆文件......他们都是这种文件名

english words number.extension
or 
english words Charaters.extension   (Charaters mean Chinese, Japanese, Koren etc)

如何编写Regexp来过滤它们,删除数字和非英文字符

这样他们就可以成为

english words.extension

-thx

2 个答案:

答案 0 :(得分:1)

只需26封英文字母即可使用/[^A-Za-z]//[^a-z]/i。我不知道你用什么编程语言来提供更具体的例子。

答案 1 :(得分:0)

如果您不介意有点冗长,您可以明确列出“可接受的”字符,并拒绝列表中没有的任何内容。例如:

for old_filename in `ls`; do
    new_filename = `echo $old_filename |sed -e 's/[^a-zA-Z.-_ ]//g'`
    mv $old_filename $new_filename
done

如果'A-Z'等字符范围正在拾取一些您不想要的字符(根据您的语言环境可能会出现问题,也可能不成问题),那么您可以随时单独列出每个字母。

如果您只想获取目录中的某些文件(按扩展名过滤等),请调整“ls”调用。如果多个文件转换为相同的“仅英文”名称,您将遇到问题,但是您应该能够通过在文件名后附加一个额外的字符来解决这个问题。