2010-03-15 123 views
4

鑑於像String a="- = - - What is your name?";正則表達式刪除前導空格和破折號

字符串如何刪除前導平等,破折號,空格字符,讓乾淨的文字,

「你叫什麼名字? 「

+2

你在用什麼語言工作? – 2010-03-15 12:24:25

+1

現在所有的答案都是正確的,其中一些更嚴格,他們從字符串中刪除的更自由。不同的語言對於它們的正則表達式也有稍微不同的實現/語法。所以你必須對你的正則表達式的語言和要求非常具體,以得到'最好'的答案。 – NomeN 2010-03-15 13:23:33

回答

5

如果你要刪除的領先的非字母可以匹配:

^[^a-zA-Z]+ 

''(空字符串)替換它。

說明:

  • first ^ - 錨,以配合在 begining。
  • [] - 焦炭類
  • second ^ - 否定一個字符類
  • + - 一個或多個以前匹配的

所以正則表達式匹配一個或多個任何非字母是的在字符串的開頭。

在你的情況下,它將擺脫所有的領先空間,領導連字符和領先的等號。總之第一個字母表之前的所有內容。

+0

^\ W +通常做同樣的事情,也許將+改成*(前面可能沒有任何內容) – NomeN 2010-03-15 14:40:22

+0

@NomenN:\ W不包括數字,但[^ a-zA-Z]可以包含數字。用*代替+不是一個好主意,說輸入是「你好」,我不需要替換任何東西。但是如果我使用*,我仍然會有一場比賽(空比賽),我會用空蜇取代它......導致沒有改變。使用+不會匹配任何東西以替代...使其更有效率。明智的。 – codaddict 2010-03-15 15:06:44

+0

我猜數字部分取決於要求。 * vs +的好解釋,我沒有考慮過。 – NomeN 2010-03-15 18:22:03

1

在Javascript中,你可以做這樣的

var a = "- = - - What is your name?"; 
a = a.replace(/^([-=\s]*)([a-zA-Z0-9])/gm,"$2"); 
+1

爲什麼不只是'a.replace(/^[ - = \ s] */mg,「」)' – kennytm 2010-03-15 13:08:39

+0

我的背景認爲他可能不希望這樣做空白行,但你的假設也可能是正確的。 – Robusto 2010-03-15 13:53:30

1

的Java:

String replaced = a.replaceFirst("^[-= ]*", ""); 
+0

我會將+改成* – NomeN 2010-03-15 14:41:51

+0

@NomeN:爲什麼?如果沒有任何違規角色存在 - 噢,等等,我看@codaddict已經涵蓋了這一點。 – 2010-03-15 15:43:06

+0

明白了........ – 2010-03-15 15:57:58

0

假設的Java試試這個正則表達式:

/^\W*(.*)$/ 

檢索捕獲組1的字符串!

\W*比賽之前的所有非單詞字符
(.*)然後用相匹配的第一個字字符開始的所有字符結束

^,$是界限。在這種情況下,你甚至可以不用$。

提示請嘗試優秀的Java regex tutorial以供參考。

+0

謝謝@NomeN,你推薦的教程非常好:) – 2010-03-15 22:41:15

0

在Python:

>>> "- = - - What is your name?".lstrip("-= ") 
'What is your name?' 

要刪除任何類型的空白,使用.lstrip("-= \t\r\n")

+0

不是。 'lstrip'獲取一個字符列表,而不是一個正則表達式。 – 2010-03-15 15:10:19

相關問題