1

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

$sentence = '堆栈溢出 - 在这里提问';

以便仅回显以下内容:

堆栈溢出

字符数不同,但停止点始终是“Space Dash Space”

4

3 回答 3

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'

当然,您可以构建一个正则表达式以将整个字符串与您预期的标记匹配,并对第一部分进行分组,但鉴于这两种方法的工作量比必要的要多。

于 2009-01-03T23:11:24.253 回答
0

$variable尽管您没有提到语言,但由于名称,我会猜测 Perl 。在 Perl 中,最简单的方法之一是使用简单的正则表达式:

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

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

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

于 2009-01-03T22:45:46.520 回答
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";

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

于 2009-01-03T23:13:27.507 回答