2009-01-03 4 views
1

Comment puis-je tronquer une phrase à un certain caractère:troncature Texte à un arrêt de caractères match

$ phrase = « Stack Overflow - Posez des questions ici »;

de sorte que seul ce qui suit est fait l'écho:

Stack Overflow

Le nombre de caractères varie, mais le point d'arrêt est toujours "Space Dash"

Répondre

0

Bien que vous n'avez pas mentionné une langue , Je vais deviner Perl en raison du nom $variable. Dans Perl l'un des moyens les plus faciles à faire est d'utiliser une expression régulière simple:

$sentence = 'Stack Overflow - Ask Questions Here'; 

if ($sentence =~ /^(.*?) - /) { 
    print "Found match: '$1'\n"; 
} 

Cela correspond à la première partie de la chaîne, de façon non avide, jusqu'à la première séquence de l'espace de l'espace au tableau de bord . La parenthèse autour de la première partie de l'expression indique que la partie correspondante doit être "capturée", en Perl elle sera stockée dans la variable $ 1 (les autres motifs capturés sont stockés dans $ 2, $ 3, etc). Si une correspondance est trouvée, la partie correspondante est stockée dans $ 1 et ensuite imprimée.

2

Si vous utilisez python une approche non-regexp serait:

>>> s = 'Stack Overflow - Ask Questions Here' 
>>> s.split(' - ') 
['Stack Overflow', 'Ask Questions Here'] 
>>> # To get the substring before the match 
>>> s.split(' - ')[0] 
'Stack Overflow' 

Une approche regexp pourrait être:

>>> import re 
>>> re.split(' - ', s)[0] 
'Stack Overflow' 

Bien sûr, vous pouvez construire une expression rationnelle pour correspondre à la chaîne entière avec votre jeton attendu, et groupe la première partie, mais étant donné ces deux méthodes, cela représente plus de travail que nécessaire.

+0

La scission travaillerait avec un variété de langues. – Brody

0

En supposant Perl, essayez ceci:

$sentence1 = 'Stack Overflow - Ask Questions Here - And more here'; 
$sentence2 = 'Just Stack Overflow'; 

$sentence1 =~ /^(.*?)(- |$)/; 
print $1, "\n"; 

$sentence1 =~ /^(?|(.*) - |(.*)$)/; 
print $1, "\n"; 

$sentence2 =~ /^(.*?)(- |$)/; 
print $1, "\n"; 

$sentence2 =~ /^(?|(.*) - |(.*)$)/; 
print $1, "\n"; 

Ces correspondront à la première ou la dernière « - », ou la chaîne entière s'il n'y a pas « - »