删除标点并替换空格

use*_*009 -2 regex

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

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

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

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

Chapter_1_My_name_is_Shojib_aka_mhs

ste*_*ema 5

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

你需要使用两个正则表达式.第一个删除标点符号,第二个用下划线替换空白.

s/[^\w\s]//g
Run Code Online (Sandbox Code Playgroud)

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

\s 一个空白字符

[] 一个角色类

^ 在字符类中的第一个位置是否定

[^\w\s] 所有不是\ w和\ s的字符

这将替换任何不是单词字符的东西,而不是没有空格的空格.

第二步是用_替换剩余的空格

s/\s/_/g
Run Code Online (Sandbox Code Playgroud)

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

Chapter\s*\d:.*
Run Code Online (Sandbox Code Playgroud)

\d 是一样的 [0-9]

\s* 意味着任何数量的空白

您是否期望章节数大于9?然后用

Chapter\s*\d+:.*
Run Code Online (Sandbox Code Playgroud)

+意味着至少有一个,因此\d+将匹配至少一个数字.