Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
895
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
906
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4351
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Мой regex слишком сильно совпадает. Как мне заставить его остановиться?
J0000000: Transaction A0001401 started on 8/22/2008 9:49:29 AM
J0000010: Project name: E:\foo.pf
J0000011: Job name: MBiek Direct Mail Test
J0000020: Document 1 - Completed successfully
J0000000: Transaction A0001401 started on 8/22/2008 9:49:29 AM
J0000010: Project name: E:\foo.pf
J0000011: Job name: MBiek Direct Mail Test
J0000020: Document 1 - Completed successfully
У меня есть эта гигантская уродливая строка, и я пытаюсь извлечь из нее кусочки, используя regex.
В этом случае я хочу захватить все после "Project Name" до той части, где он говорит "J0000011:" (11 будет каждый раз другим числом).
Вот тот regex, с которым я играл
Project name:\s+(.*)\s+J[0-9]{7}:
Проблема в том, что он не останавливается, пока не достигнет J0000020: в конце.
Как заставить regex остановиться при первом появлении J[0-9]{7} ?
Использование не жадных кванторов здесь, вероятно, является лучшим решением, также потому, что оно более эффективно, чем жадная альтернатива: жадные соответствия обычно идут так далеко, как они могут (здесь, до конца текста!) и затем trace назад символ за символом, чтобы попытаться соответствовать части, идущей после этого.
Однако вместо этого рекомендуется использовать класс отрицательных символов:
Project name:\s+(\S*)\s+J[0-9]{7}:
\S означает " все, кроме whitespace, и это именно то, что вы хотите.
Ну, ".*" -это жадный селектор. Вы делаете его не жадным с помощью ".*?" при использовании последней конструкции движок regex будет, на каждом шаге он сопоставляет текст в "." попытке сопоставить все, что приходит после ".*?" . Это означает , что если, например, ничто не приходит после ".*?", то оно ничему не соответствует.
Вот что я использовал. s содержит вашу исходную строку. Этот код является специфичным для .NET, но большинство ароматов regex будут иметь нечто подобное.
string m = Regex.Match(s, @"Project name: (?<name>.*?) J\d+").Groups["name"].Value;
Я бы также рекомендовал вам поэкспериментировать с регулярными выражениями с помощью "Expresso"-это отличная (и бесплатная) утилита для редактирования и тестирования regex.
Один из его недостатков заключается в том, что его UI раскрывает много функций regex, которые люди, не знакомые с regex, могут быть не знакомы, так что им будет легко изучить эти новые концепции.
Например, при построении вашего regex с помощью UI и выборе " * " у вас есть возможность проверить checkbox "As few as possible" и увидеть результирующий regex, а также проверить его поведение, даже если вы раньше не были знакомы с нежадными выражениями.
Доступно для скачивания на их сайте: http://www.ultrapico.com/Expresso.htm
Экспресс-загрузка: http://www.ultrapico.com/ExpressoDownload.htm