因为你没有提到这种语言,所以这个答案是使用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+将匹配至少一个数字.