正则表达式:匹配短语中的所有单词

本文关键字:单词 短语 正则表达式 | 更新日期: 2023-09-27 18:36:02

这可能吗?

对于像hello how are you这样的句子,我希望我的正则表达式返回hello how are you。它只返回hello而不返回其他单词。

我的正则表达式:

[A-Za-z]*

任何帮助将不胜感激。谢谢!如果重要的话,我正在使用Pharo Smalltalk。我也一直在用 c# 进行测试。

正则表达式:匹配短语中的所有单词

同样在Pharo中发送#substrings消息:

'Hello how are you' substrings

并获取数组:

#('Hello' 'how' 'are' 'you').

你可以在这里找到关于Pharo中正则表达式的章节:

https://ci.inria.fr/pharo-contribution/view/Books/job/DeepIntoPharo/lastSuccessfulBuild/artifact/tmp/PBE2.pdf

我你只想在你可以运行的空格上拆分字符串:

Character space split: 'My String To split'

您将获得包含所有单词的订购集合。

如果您只需要将句子拆分为空格,则可以使用string.Split()方法完成:

var s = "hello how are you";
var words = s.Split();

如果要使用正则表达式:

var s = "hello how are you";
var regex = "''w+";
var words = Regex.Matches(s, regex).Cast<Match>().Select(m => m.Value);

在这种情况下,您根本不需要正则表达式。只需使用 Split .

string str = "hello how are you";
string[] parts = str.Split(' ');

如果你真的太想要正则表达式了,'w+因为正则表达式捕获了任何单词。所以在 C# 中,正则表达式应该看起来像这样 string regex = "''w+" 如果你至少需要单词的话。

  • 'w代表任何单词,包括字符
  • +量词至少代表一次
  • *量词代表零次或多次

标准尝试匹配,但事实并非如此,因为有空格

matcher := RxMatcher forString: '[A-Za-z]*'.
matcher matches: 'hello how are you'
false

如果你要求所有匹配项,它会告诉你有 5 个,因为 * 也匹配零个字符

matcher := RxMatcher forString: '[A-Za-z]*'.
matcher matchesIn: 'hello how are you'
"an OrderedCollection('hello' 'how' 'are' 'you' '')"

对于想要的结果,您可以尝试

matcher := RxMatcher forString: '[A-Za-z]+'.
matcher matchesIn: 'hello how are you'
"an OrderedCollection('hello' 'how' 'are' 'you')"

如果你想知道这些词有多长,你可以做

matcher := RxMatcher forString: '[A-Za-z]+'.
matcher matchesIn: 'hello how are you' collect: [ :each | each size ]
"an OrderedCollection(5 3 3 3)"