Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何拆分字符串并捕获以正则表达式结尾的句子?_Regex_Perl - Fatal编程技术网

Regex 如何拆分字符串并捕获以正则表达式结尾的句子?

Regex 如何拆分字符串并捕获以正则表达式结尾的句子?,regex,perl,Regex,Perl,我想拆分一个字符串并捕获以字符结尾的句子,如,?,,也是 换句话说,我的正则表达式基于空格和特殊字符来分隔字符串,这些字符在英语句子中以类似,?,结尾但它应该保留这些 我知道这有点混乱,所以请看下面的数组,以防 像这样的句子 why you are eating too much? @word = ( "why", "you", "are", "eating", "too", "much", "?" ); 存储这些单词的数组应该如下所示 why you are eating too much

我想拆分一个字符串并捕获以字符结尾的句子,如
?,
也是

换句话说,我的正则表达式基于空格和特殊字符来分隔字符串,这些字符在英语句子中以类似
结尾但它应该保留这些

我知道这有点混乱,所以请看下面的数组,以防 像这样的句子

why you are eating too much?
@word = ( "why", "you", "are", "eating", "too", "much", "?" );
存储这些单词的数组应该如下所示

why you are eating too much?
@word = ( "why", "you", "are", "eating", "too", "much", "?" );
但是我的代码输出数组是这样的

@word=("why"," ","you","are","eating","too"," ","much","?","?");
代码:

my $s = "why you are eating too much?";

my @word = split /(\s+|([\s+.?!]))/, $s;

for ( @word ){
    print "$_\n";
} 

您可以使用以下正则表达式,而不是使用
split()

以下是Perl中的示例代码和:


如果您知道要扔掉什么,请使用
split

如果您知道要保留什么,请在列表上下文中使用
m//g

这看起来像是后一种情况:

my $str = "why are you eating too much?";
my @words = $str =~ m/[^\s.!?]+|[.!?]/g;

你的问题很难理解,因为预期的输入和输出都很混乱。这里不需要使用HTML标记。只需查看您的问题,然后使用代码块进行输入和输出。您的输出与您向我们展示的代码不匹配。请出示真实代码。请将真实代码输入问题。非现场资源可能会下降,这只是几行。也请像我之前说的那样解决这个问题。实际的人都在试图帮助你,但你需要尽自己的一份力。这对你的帮助,但你的代码有很多?作为一个项目,我需要的实际上是“很多”,看看我想要的输出,只想知道我在说什么,这样就更简单了。我已经更新了答案。你的答案很完美,但并非在所有情况下都有效。例如,如果我有这样一句话:“为什么你‘吃’太多了?”我想把所有标点符号都保留在句子中。例如,我试图在空格中拆分,如果这些特殊字符中的任何一个出现在结尾(.?!)我也应该存储,但同时我想保留句子中的所有标点符号,如果存在,以及它的全部目的,如果查看数组中的最后一项,我无法判断它是疑问句还是常规句,同时保留句子中的所有语法。我认为最简单的方法是基于空格拆分字符串,并查看结尾语句并存储任何特殊字符