Здравствуйте, skodnik, Вы писали:
S>Здравствуйте, Пельмешко, Вы писали:
П>>Давайте попробуем формализовать что-ли, что конкретно Вам надо найти?
S>Необходимо найти все пары слов, которые написаны через (пробел | несколько пробелов | несколько табов). S>Результат по предыдущей строке должен быть таким:
S>
S>Необходимо найти
S>найти все
S>все пары
S>пары слов
S>которые написаны
S>написаны через
S>несколько пробелов
S>несколько табов
можно как-нибудь вот так:
let input = @"Необходимо найти все пары слов, которые написаны через (пробел | несколько пробелов | несколько табов)."let regex = System.Text.RegularExpressions.Regex(@"(?=(\b\w+\s+\w+\b))\b\w+\b")
for m in regex.Matches input do
printfn "%s" m.Groups.[1].Value
Здравствуйте, skodnik, Вы писали:
S>Ищу пары слов в предложении. S>РВ: \w+[\s]+\w+ S>К сожалению из предложения S>"Слово1 слово2 слово3 слово4" S>замачило только две пары S>"Слово1 слово2" S>"слово3 слово4" S>а хотелось еще одну пару увидеть: S>"слово2 слово3"
S>Что тут допилить?
Ищу пары слов в предложении.
РВ: \w+[\s]+\w+
К сожалению из предложения
"Слово1 слово2 слово3 слово4"
замачило только две пары
"Слово1 слово2"
"слово3 слово4"
а хотелось еще одну пару увидеть:
"слово2 слово3"
Здравствуйте, skodnik, Вы писали:
S>Ищу пары слов в предложении. S>РВ: \w+[\s]+\w+ S>К сожалению из предложения S>"Слово1 слово2 слово3 слово4" S>замачило только две пары S>"Слово1 слово2" S>"слово3 слово4" S>а хотелось еще одну пару увидеть: S>"слово2 слово3"
S>Что тут допилить?
А как регвыру понять, откуда продолжать поиск?
Почему бы ему с таким же успехом не найти:
Здравствуйте, Пельмешко, Вы писали:
П>Давайте попробуем формализовать что-ли, что конкретно Вам надо найти?
Необходимо найти все пары слов, которые написаны через (пробел | несколько пробелов | несколько табов).
Результат по предыдущей строке должен быть таким:
Необходимо найти
найти все
все пары
пары слов
которые написаны
написаны через
несколько пробелов
несколько табов
Re[3]: Регулярное выражение - Help
От:
Аноним
Дата:
04.10.10 14:23
Оценка:
Здравствуйте, skodnik, Вы писали:
S>Здравствуйте, Пельмешко, Вы писали:
П>>Давайте попробуем формализовать что-ли, что конкретно Вам надо найти?
S>Необходимо найти все пары слов, которые написаны через (пробел | несколько пробелов | несколько табов).
Здравствуйте, Пельмешко, Вы писали: П>можно как-нибудь вот так: П>[ocaml] П>let input = @"Необходимо найти все пары слов, которые написаны через (пробел | несколько пробелов | несколько табов)." П>let regex = System.Text.RegularExpressions.Regex(@"(?=(\b\w+\s+\w+\b))\b\w+\b")
Здравствуйте, skodnik, Вы писали:
S>Здравствуйте, Пельмешко, Вы писали: П>>можно как-нибудь вот так: П>>[ocaml] П>>let input = @"Необходимо найти все пары слов, которые написаны через (пробел | несколько пробелов | несколько табов)." П>>let regex = System.Text.RegularExpressions.Regex(@"(?=(\b\w+\s+\w+\b))\b\w+\b")
S>Можете пояснить как это оно заработало?
Регвыр ищет "два слова подряд", как Вы и просили, но в результирующем совпадении оставляет только первое и следующий поиск начинается со второго слова предыдущей пары.
Конструкция (?=выражение) — это группа утвержения просмотра вперёд нулевой длинны, в данном случае именно в нём осуществляется поиск пары слов. Такие группы могут содержать capture-группы и их можно успешно достать через коллекцию match.Groups, если они совпали, конечно.
Здравствуйте, skodnik, Вы писали:
П>>Давайте попробуем формализовать что-ли, что конкретно Вам надо найти?
S>Необходимо найти все пары слов, которые написаны через (пробел | несколько пробелов | несколько табов).
Regex для этого не нужен. Достаточно банального string.Split-а.