Мы будем использовать ниже регулярное выражение, чтобы получить цифры перед словами.
Пример :
838123 SomeWord 8 SomeWord 12 SomeWord
(\d+)\s*someWord
Но иногда между словом и числом будет что-нибудь. Пожалуйста, посмотрите строку примера ниже.
Пример:
43434 Someword 12 что-нибудь Someword 2323 Новое Someword
Как получить точную цифру перед этим словом с помощью регулярных выражений?
Пожалуйста, дайте мне ваши предложения.
Ответы:
Сделай это:
(\d+)[^\d]+some[wW]ord
Вы должны принять что-либо, кроме самих цифр. Также я рассмотрел оба,
w
иW
так как ваши примеры содержали оба.демонстрация
источник
Предполагая, что «что-нибудь» не содержит цифр, вы можете использовать это регулярное выражение:
Демо на regex101
источник
Один из возможных «пропущенных угловых случаев» из ответа CinCout - если совпадение
someWord
должно быть точным, например, еслиnotsomeWord
иsomeWordNotThis
не должно совпадать.Следующее расширение этого регулярного выражения предоставляет способ решения этой проблемы:
(\d+)[^\d]*[^\w]some[wW]ord[^\w]
Объяснение:
[^\w]
до или после согласовани дляsomeWord
Ищут «не-символ слова» до и после него - конец линии также рассчитывает здесь. Конечно, это можно сделать более сложным / конкретным, в зависимости от конкретных требований.демонстрация
источник
Вы можете попробовать что-то вроде этого:
Вы можете увидеть тест здесь
источник
сначала разделить
some[wW]ord
,number
иspace
с шаблоном, затем выполнить второй шаблон на немКогда будет выполнен первый шаблон, предложение будет по желанию
изменение:
источник
Но иногда между словом и числом будет что-нибудь. Пожалуйста, посмотрите строку примера ниже.
Пример:
попробуй это
Разъяснения
демонстрация
источник
Использование
\s*
будет соответствовать только 0 или более пробельных символов.Вы можете использовать,
\D+
но он также будет соответствовать символам новой строки, поскольку он соответствует любому символу, кроме цифры.Если вы хотите сопоставить цифры в той же строке, вы можете добавить не совпадающий символ новой строки в класс отрицанных символов
[^\d\r\n]
В вашем примере вы используете
\d
, но если вы хотите совпадать только с 1 или более цифрами 0-9, вы можете использовать класс символов[0-9]+
Чтобы цифры и слова не входили в большее слово, вы можете использовать границы слов
\b
Если вы хотите сопоставить слово без учета регистра, вы можете использовать
RegexOptions.IgnoreCase
или встроенный модификатор(?i)
Посмотреть демо-версию .NET regex
источник
Используйте именованные совпадения (для получения данных используйте
mtch.Groups["Value"].Value
... и т. Д.) Для извлечения информации по мере необходимости.Когда выше запускаются ( с
IgnorePatternWhiteSpace
иным удалить комментарии и присоединиться к шаблону , чтобы запустить его , например , как(?<Value>\d+)(?<Other>.+?)(?<Key>someword)
без вариантов регулярных выражений ) она получает данные для каждых данных / пара ключей и организует каждый в одной игре.Результат
Вот результат (для вашего второго примера), который содержится в отдельных матчах, и их группы и захваты предоставляют в каждом матче:
Визуально вот что соответствует:
источник