Обрезать текст при совпадении символов - PullRequest
1 голос
/ 04 января 2009

Как бы я обрезал предложение до определенного символа:

$ предложение = 'Переполнение стека - задавайте вопросы здесь';

, чтобы отображалось только следующее:

Переполнение стека

Количество символов варьируется, но конечной точкой всегда является «Space Dash Space»

Ответы [ 3 ]

2 голосов
/ 04 января 2009

Если использовать python, подход без регулярных выражений будет:

>>> 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'

Подход регулярного выражения может быть:

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

Конечно, вы можете создать регулярное выражение, чтобы сопоставить всю строку с ожидаемым токеном, и сгруппировать первую часть, но с учетом этих двух методов это больше работы, чем необходимо.

0 голосов
/ 04 января 2009

Предполагая Perl, попробуйте это:

$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";

Они будут соответствовать первому или последнему «-», или всей строке, если «-»

0 голосов
/ 04 января 2009

Хотя вы не упомянули язык, я собираюсь угадать Perl из-за имени $variable. В Perl одним из самых простых способов сделать это является использование простого регулярного выражения:

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

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

Это соответствует первой части строки, не жадным образом, вплоть до первой последовательности пробел-тире-пробел. Круглые скобки вокруг первой части выражения указывают, что соответствующая часть должна быть «захвачена», в Perl она будет сохранена в переменной $ 1 (другие захваченные шаблоны хранятся в $ 2, $ 3 и т. Д.) Если совпадение найдено, соответствующая часть сохраняется в $ 1 и затем печатается.

...