在停止字符匹配时截断文本

时间:2009-01-03 22:24:27

标签: truncate

如何截断某个字符的句子:

$ sentence ='Stack Overflow - 在这里提出问题';

以便只回显以下内容:

Stack Overflow

字符数会有所不同,但停止点始终为“Space Dash Space”

3 个答案:

答案 0 :(得分:2)

如果使用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'

当然,你可以构建一个正则表达式来匹配整个字符串和你期望的令牌,并对第一部分进行分组,但是这两种方法比必要的工作更多。

答案 1 :(得分:0)

虽然您没有提及某种语言,但由于$variable名称,我将猜测Perl。在Perl中,最简单的方法之一是使用简单的正则表达式:

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

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

这将以非贪婪的方式匹配字符串的第一部分,直到第一个空格 - 空格序列。表达式第一部分周围的括号表示匹配部分应该“捕获”,在Perl中它将存储在变量$ 1中(其他捕获的模式存储在$ 2,$ 3等)。如果找到匹配项,匹配的部分将存储到$ 1中,然后打印。

答案 2 :(得分:0)

假设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";

这些将匹配第一个或最后一个“ - ”,如果没有“ - ”则匹配整个字符串