Regex: сопоставление всех слов в фразе
Это возможно?
Для предложения, такого как hello how are you
Я хотел бы, чтобы мое регулярное выражение вернулось hello
how
are
you
, Это только когда-либо возвращается только hello
а не другие слова.
Мой Regex:
[A-Za-z]*
Любая помощь с благодарностью. Спасибо! Если это имеет значение, я использую Pharo Smalltalk. Я тоже тестировал в C#.
5 ответов
Если вам нужно только разделить предложение на пробелы, это можно сделать с помощью 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);
Также в Фаро отправить #substrings
сообщение:
'Hello how are you' substrings
и получить массив:
#('Hello' 'how' 'are' 'you').
Вы можете найти главу о Regex в Pharo здесь:
Если вы просто хотите разбить строку на пробелы, которые вы можете просто запустить:
Character space split: 'My String To split'
Вы получите OrderedCollection со всеми словами.
Стандарт пытается соответствовать, чего нет, потому что есть пробелы
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)"
Вам не нужно Regex в этом случае вообще. Просто использовать Split
,
string str = "hello how are you";
string[] parts = str.Split(' ');
В случае, если вы действительно очень хотите Regex, \w+
как регулярное выражение захватывает любое слово. Так что в C# регулярное выражение должно выглядеть так string regex = "\\w+"
если вам нужно хотя бы слово.
\w
обозначает любое слово, включая символы как+
квантификатор стоит хотя бы один раз*
квантификатор обозначает ноль или более раз