Re[3]: Регулярное выражение - Help
От: Пельмешко Россия blog
Дата: 04.10.10 15:02
Оценка: 14 (2)
Здравствуйте, 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

вроде даже работает
Re: Регулярное выражение - Help
От: Аноним  
Дата: 04.10.10 13:40
Оценка: +1
Добавить флаги: i, g

Здравствуйте, skodnik, Вы писали:

S>Ищу пары слов в предложении.

S>РВ: \w+[\s]+\w+
S>К сожалению из предложения
S>"Слово1 слово2 слово3 слово4"
S>замачило только две пары
S>"Слово1 слово2"
S>"слово3 слово4"
S>а хотелось еще одну пару увидеть:
S>"слово2 слово3"

S>Что тут допилить?
Регулярное выражение - Help
От: skodnik  
Дата: 04.10.10 13:11
Оценка:
Ищу пары слов в предложении.
РВ: \w+[\s]+\w+
К сожалению из предложения
"Слово1 слово2 слово3 слово4"
замачило только две пары
"Слово1 слово2"
"слово3 слово4"
а хотелось еще одну пару увидеть:
"слово2 слово3"

Что тут допилить?
Re[2]: Регулярное выражение - Help
От: skodnik  
Дата: 04.10.10 13:46
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Добавить флаги: i, g


Увы, не помогает.
Re: Регулярное выражение - Help
От: Пельмешко Россия blog
Дата: 04.10.10 13:57
Оценка:
Здравствуйте, skodnik, Вы писали:

S>Ищу пары слов в предложении.

S>РВ: \w+[\s]+\w+
S>К сожалению из предложения
S>"Слово1 слово2 слово3 слово4"
S>замачило только две пары
S>"Слово1 слово2"
S>"слово3 слово4"
S>а хотелось еще одну пару увидеть:
S>"слово2 слово3"

S>Что тут допилить?


А как регвыру понять, откуда продолжать поиск?
Почему бы ему с таким же успехом не найти:
лово1 слово2
ово1 слово2
во1 слово2
о1 слово2
1 слово2


Давайте попробуем формализовать что-ли, что конкретно Вам надо найти?

Re[2]: Регулярное выражение - Help
От: skodnik  
Дата: 04.10.10 14:09
Оценка:
Здравствуйте, Пельмешко, Вы писали:

П>Давайте попробуем формализовать что-ли, что конкретно Вам надо найти?


Необходимо найти все пары слов, которые написаны через (пробел | несколько пробелов | несколько табов).
Результат по предыдущей строке должен быть таким:

Необходимо найти
найти все
все пары
пары слов
которые написаны
написаны через
несколько пробелов
несколько табов

Re[3]: Регулярное выражение - Help
От: Аноним  
Дата: 04.10.10 14:23
Оценка:
Здравствуйте, skodnik, Вы писали:

S>Здравствуйте, Пельмешко, Вы писали:


П>>Давайте попробуем формализовать что-ли, что конкретно Вам надо найти?


S>Необходимо найти все пары слов, которые написаны через (пробел | несколько пробелов | несколько табов).


Regex.Split
Re[4]: Регулярное выражение - Help
От: skodnik  
Дата: 04.10.10 14:25
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Regex.Split

Это не из той оперы немножечко
Re[4]: Регулярное выражение - Help
От: skodnik  
Дата: 05.10.10 07:20
Оценка:
Здравствуйте, Пельмешко, Вы писали:

П>вроде даже работает

супер, спасибо!
Re[4]: Регулярное выражение - Help
От: skodnik  
Дата: 05.10.10 07:21
Оценка:
Здравствуйте, Пельмешко, Вы писали:
П>можно как-нибудь вот так:
П>[ocaml]
П>let input = @"Необходимо найти все пары слов, которые написаны через (пробел | несколько пробелов | несколько табов)."
П>let regex = System.Text.RegularExpressions.Regex(@"(?=(\b\w+\s+\w+\b))\b\w+\b")

Можете пояснить как это оно заработало?
Re[5]: Регулярное выражение - Help
От: Пельмешко Россия blog
Дата: 05.10.10 07:39
Оценка:
Здравствуйте, skodnik, Вы писали:

S>Здравствуйте, Пельмешко, Вы писали:

П>>можно как-нибудь вот так:
П>>[ocaml]
П>>let input = @"Необходимо найти все пары слов, которые написаны через (пробел | несколько пробелов | несколько табов)."
П>>let regex = System.Text.RegularExpressions.Regex(@"(?=(\b\w+\s+\w+\b))\b\w+\b")

S>Можете пояснить как это оно заработало?


Регвыр ищет "два слова подряд", как Вы и просили, но в результирующем совпадении оставляет только первое и следующий поиск начинается со второго слова предыдущей пары.
Конструкция (?=выражение) — это группа утвержения просмотра вперёд нулевой длинны, в данном случае именно в нём осуществляется поиск пары слов. Такие группы могут содержать capture-группы и их можно успешно достать через коллекцию match.Groups, если они совпали, конечно.

Re[3]: Регулярное выражение - Help
От: Lloyd Россия  
Дата: 05.10.10 08:12
Оценка:
Здравствуйте, skodnik, Вы писали:

П>>Давайте попробуем формализовать что-ли, что конкретно Вам надо найти?


S>Необходимо найти все пары слов, которые написаны через (пробел | несколько пробелов | несколько табов).


Regex для этого не нужен. Достаточно банального string.Split-а.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.