如何截断某个字符的句子:
$ sentence ='Stack Overflow - 在这里提出问题';
以便只回显以下内容:
Stack Overflow
字符数会有所不同,但停止点始终为“Space Dash Space”
答案 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";
这些将匹配第一个或最后一个“ - ”,如果没有“ - ”则匹配整个字符串