Truncate 在停止字符匹配处截断文本

Truncate 在停止字符匹配处截断文本,truncate,Truncate,如何在某个字符处截断句子: $SENTURE='堆栈溢出-在此处提问' 因此,只有以下内容得到回应: 堆栈溢出 字符计数各不相同,但停止点始终是“空格-破折号-空格”虽然您没有提到语言,但我将根据$variable名称猜测Perl。在Perl中,最简单的方法之一是使用简单的正则表达式: $sentence = 'Stack Overflow - Ask Questions Here'; if ($sentence =~ /^(.*?) - /) { print "Found match:

如何在某个字符处截断句子:

$SENTURE='堆栈溢出-在此处提问'

因此,只有以下内容得到回应:

堆栈溢出


字符计数各不相同,但停止点始终是“空格-破折号-空格”

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

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

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

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

如果使用python,则非regexp方法将是:

>>> 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'
regexp方法可能是:

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

当然,您可以构建一个regexp,将整个字符串与您期望的令牌相匹配,并对第一部分进行分组,但鉴于这两种方法的工作量比所需的要大。

假设使用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";
这些将匹配第一个或最后一个“-”,如果没有“-”,则匹配整个字符串