2010-03-15 6 views
4

d'une chaîne comme String a="- = - - What is your name?";supprimer Regular Expression premier caractère blanc et tableau de bord

Comment supprimer les principaux égaux, tableau de bord, les caractères de l'espace, pour obtenir le texte propre,

« Quel est votre nom? "

+2

dans quelle langue travaillez-vous? –

+1

Toutes les réponses ici en ce moment sont correctes, certaines sont plus strictes d'autres plus libérales dans ce qu'elles retirent de la chaîne.Différents langages ont également des implémentations/syntaxes légèrement différentes pour leurs regex. Vous devrez donc être très précis en ce qui concerne la langue et les exigences de votre regex pour obtenir la «meilleure» réponse. – NomeN

Répondre

5

Si vous voulez supprimer les trois non-alphabets vous pouvez faire correspondre:

^[^a-zA-Z]+ 

et le remplacer par '' (chaîne vide).

Explication:

  • first ^ - Anchor pour correspondre au début .
  • [] - classe omble chevalier
  • second ^ - négation dans une classe char
  • + - Un ou plusieurs du match précédent

Ainsi, le regex correspond un ou plusieurs de tous les non-alphabets qui sont au début de la chaîne.

Dans votre cas, il se débarrassera de tous les espaces d'interlignage, des traits d'union et des signes d'égalité. Bref tout avant le premier alphabet.

+0

^\ W + fait généralement la même chose, peut-être changer le + en * (il n'y a peut-être rien de précédent) – NomeN

+0

@NomenN: \ W n'inclut pas de chiffres, mais [^ a-zA-Z] peut inclure des chiffres. Remplacer + avec * n'est pas une bonne idée, disons que l'entrée est "Salut là" où je n'ai pas besoin de remplacer quoi que ce soit. Mais si j'utilise *, j'aurai toujours une correspondance (match vide) et je la remplacerai par une piqûre vide ... n'entrainant aucun changement. Utiliser + ne correspondra à rien, donc rien à remplacer ... le rendant plus efficace ... préformance. sage. – codaddict

+0

Je suppose que la partie des chiffres dépend des exigences. Bonne explication sur le * vs +, je n'avais pas considéré cela. – NomeN

1

En Javascript, vous pouvez le faire comme ça

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

Pourquoi pas juste 'a.replace (/^[- = \ s] */mg," ")' – kennytm

+0

Mon idée de base était qu'il ne voulait peut-être pas que cela fonctionne sur des lignes vides, mais votre ensemble de suppositions pourrait aussi être juste . – Robusto

1

Java:

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

Je voudrais changer le + en * – NomeN

+0

@NomeN: Pourquoi? Si aucun des caractères incriminés n'est présent - oh attends, je vois que @codaddict a déjà couvert ça. –

+0

Got it ........ –

0

En supposant Java essayer cette regex:

/^\W*(.*)$/ 

récupérer votre chaîne de groupe capturé 1!

\W* tous les matchs précédents caractères non-mot
(.*) correspond alors tous les caractères à la fin en commençant par le premier caractère de mot

^, $ sont les limites. vous pourriez même faire sans $ dans ce cas.

Astuce essayez l'excellent Java regex tutorial pour référence.

+0

Merci @NomeN, le tutoriel que vous recommandez est excellent :) –

0

En Python:

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

Pour enlever tout type d'espaces, utilisez .lstrip("-= \t\r\n").

+0

Nope. 'lstrip' prend une liste de caractères, pas une regex. –

Questions connexes