以下是我将要搜索的示例字符串,它将与其他字符串分开:
第1章:我的名字是:Shojib(又名mhs)
这是我的正则表达式,用于查找特定行:(Chapter)( )([0-9])(:)( .*)
现在我想保留单词和整数,并删除标点符号,并用下划线分隔每个单词和整数。例如,这是替换后格式的外观:
Chapter_1_My_name_is_Shojib_aka_mhs
答案 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
将您执行 的任何字符放置在括号中的下划线