正则表达式删除前导空格和破折号

问题描述:

鉴于像String a="- = - - What is your name?";正则表达式删除前导空格和破折号

字符串如何删除前导平等,破折号,空格字符,让干净的文字,

“你叫什么名字? “

+2

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

+1

现在所有的答案都是正确的,其中一些更严格,他们从字符串中删除的更*。不同的语言对于它们的正则表达式也有稍微不同的实现/语法。所以你必须对你的正则表达式的语言和要求非常具体,以得到'最好'的答案。 – NomeN 2010-03-15 13:23:33

如果你要删除的领先的非字母可以匹配:

^[^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

$a=~s/- = - - //; 

在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

的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

假设的Java试试这个正则表达式:

/^\W*(.*)$/ 

检索捕获组1的字符串!

\W*比赛之前的所有非单词字符
(.*)然后用相匹配的第一个字字符开始的所有字符结束

^,$是界限。在这种情况下,你甚至可以不用$。

提示请尝试优秀的Java regex tutorial以供参考。

+0

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

在Python:

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

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

+0

不是。 'lstrip'获取一个字符列表,而不是一个正则表达式。 – 2010-03-15 15:10:19