2011-05-31 104 views
-2

下面是一个样本字符串我必应搜索,这将是与其他字符串在单独一行:删除标点并更换空白

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

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

现在我想保持的话和整数,并删除标点符号,并用下划线分隔各个单词和整数。例如,这是格式应该如何更换后的样子:

Chapter_1_My_name_is_Shojib_aka_mhs

+0

你在用什么语言?我几乎可以说使用一个查找和替换非字母字符'_'将是非常简单的。 – wilbbe01 2011-05-31 04:15:11

回答

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+将至少一个数字匹配。

+0

不是Perl。常规文本编辑器的查找和替换正则表达式功能。即OpenOffice,TextWrangler,Eclipse,LibreOffice。 – user730009 2011-06-02 04:52:01

+0

比尝试使用查找字段中前两个斜线之间的部分以及替换字段中斜杠2和3之间的部分。但它可能不适用于每个编辑器,取决于使用的正则表达式引擎。 – stema 2011-06-02 07:37:26

+0

是否有任何替代程序没有perl符号?如果没有,我怎么能把这两个在Perl脚本?我正在讨论将查找和替换部分放在perl脚本中。我将使用TextWrangler for mac。 – user730009 2011-06-05 03:32:14

3

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

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

把你做的任何字符不是想用括号中的下划线替换

+0

不是Perl。常规文本编辑器的查找和替换正则表达式功能。 – user730009 2011-06-02 04:51:04

+0

@ user730009,哪位编辑? – 2011-06-02 10:30:35