2011-05-31 42 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