删除标点并替换空格

时间:2011-05-31 04:10:19

标签: regex

以下是我将要搜索的示例字符串,它将与其他字符串分开:

  

第1章:我的名字是:Shojib(又名mhs)

这是我的正则表达式,用于查找特定行:(Chapter)( )([0-9])(:)( .*)

现在我想保留单词和整数,并删除标点符号,并用下划线分隔每个单词和整数。例如,这是替换后格式的外观:

  

Chapter_1_My_name_is_Shojib_aka_mhs

2 个答案:

答案 0 :(得分:5)

因为你没有提到这种语言,所以这个答案是使用Perl表示法。确切的替换语法取决于您使用的语言。

你需要使用两个正则表达式。第一个删除标点符号,第二个用空格替换空格。

s/[^\w\s]//g

表示匹配[^\w\s]并将其替换为''。 \w一个单词字符(根据您的正则表达式引擎包含不同的字符,至少0-9a-zA-Z_,如果您的语言支持Unicode,则可以是所有字母都在\w

\s一个空格字符

[]一个角色类

字符类中第一个位置的

^是否定

[^\w\s]所有不是\ w和\ s

的字符

这将替换任何不是单词字符的内容,而不是没有空格的空格。

第二步是用_

替换剩余的空格
s/\s/_/g

您的正则表达式(Chapter)( )([0-9])(:)( .*)找到您的行也可以改进。如果使用括号,则创建捕获组,这意味着匹配的模式存储在变量中。因此,搜索Chapter并将其存储到变量中是没有意义的,它已经知道了。如果您不需要这些变量,可以将正则表达式减少到:

Chapter\s*\d:.*

\d[0-9]

相同

\s*表示任意数量的空白

你期望章节数大于9吗?然后使用

Chapter\s*\d+:.*

+表示至少有一个,因此\d+将匹配至少一位数字。

答案 1 :(得分:3)

要求并不十分清楚,但这应该做到......

/[^A-Za-z0-9]/_/g

将您执行 的任何字符放置在括号中的下划线