我将如何截断某个字符的句子:
$sentence = '堆栈溢出 - 在这里提问';
以便仅回显以下内容:
堆栈溢出
字符数不同,但停止点始终是“Space Dash Space”
我将如何截断某个字符的句子:
$sentence = '堆栈溢出 - 在这里提问';
以便仅回显以下内容:
堆栈溢出
字符数不同,但停止点始终是“Space Dash Space”
如果使用 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'
当然,您可以构建一个正则表达式以将整个字符串与您预期的标记匹配,并对第一部分进行分组,但鉴于这两种方法的工作量比必要的要多。
$variable
尽管您没有提到语言,但由于名称,我会猜测 Perl 。在 Perl 中,最简单的方法之一是使用简单的正则表达式:
$sentence = 'Stack Overflow - Ask Questions Here';
if ($sentence =~ /^(.*?) - /) {
print "Found match: '$1'\n";
}
这以非贪婪方式匹配字符串的第一部分,直到第一个空格-破折号-空格序列。表达式第一部分周围的括号表示应该“捕获”匹配部分,在 Perl 中它将存储在变量 $1 中(其他捕获的模式存储在 $2、$3 等中)。如果找到匹配项,则将匹配部分存储到 $1 中,然后打印。
假设 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";
这些将匹配第一个或最后一个“ - ”,如果没有“ - ”,则匹配整个字符串