Регулярное выражение Python для соответствия после текста и точки [duplicate]

Вы можете заставить обработчик исходного кода работать, зарегистрировав имя текстового поля:

someStackPanel.RegisterName(txtNumber.Name, txtNumber);

Это позволит вам вызвать FindName в StackPanel и найти TextBox.

1
задан Wiktor Stribiżew 19 May 2015 в 14:04
поделиться

4 ответа

Я не понимаю, почему вы хотите использовать регулярное выражение, если вы просто получаете подмножество из строки.

Это работает так же:

if line.startswith('test:'):
    print(line[5:line.find('.')])

example :

>>> line = "test: match this."
>>> print(line[5:line.find('.')])
 match this

Regex работает медленно, неудобно проектировать и трудно отлаживать. Есть определенные причины использовать его, но если вы просто хотите извлечь текст между test: и ., то я не думаю, что это одно из этих случаев.

См.: https://softwareengineering.stackexchange.com/questions/113237/when-you-should-not-use-regular-expressions

Для большей гибкости (например, если вы зацикливаете список строк, которые вы хотите найти в начале строки, а затем индексировать) заменить 5 (длина «test:») в индексе с помощью len(str_you_looked_for).

1
ответ дан Community 17 August 2018 в 12:38
поделиться
  • 1
    Я полностью согласен. Обычно я стараюсь избегать регулярного выражения как можно больше. Но мне нужно сопоставить много других строк на большом количестве веб-страниц. – Amith 19 May 2015 в 13:27
  • 2
    Разве они разные? Не могут ли они быть похожими? – NDevox 19 May 2015 в 13:28
  • 3
    Просто просмотрел ссылку, которую вы предоставили. Очень интересно. Вы заставили меня пересмотреть мой подход! – Amith 19 May 2015 в 13:32
  • 4
    @Amith Я согласен, никаких строк не прилагается :) Я сам хотел бы предложить 2 решения, основанные на регулярном выражении и не регулярные выражения. На этот раз не нужно. – Wiktor Stribiżew 19 May 2015 в 13:34
  • 5
    @Amith, не проблема. Regex - одна из тех вещей, которые очень легко злоупотреблять. – NDevox 19 May 2015 в 13:35

Вам нужно использовать re.search, поскольку re.match пытается совпадения с началом строки. Чтобы соответствовать, пока не встретится пробел или период.

re.search(r'(?<=test :)[^.\s]*',text)

Чтобы соответствовать всем символам до тех пор, пока не встретится период,

re.search(r'(?<=test :)[^.]*',text)
2
ответ дан Avinash Raj 17 August 2018 в 12:38
поделиться

Все после теста, включая тест

test.*

Все после теста, без теста

(?<=video).*

Пример здесь, на regexr.com

0
ответ дан Punnerud 17 August 2018 в 12:38
поделиться

Вы можете использовать положительный прогноз вперед (?=\.|\s), чтобы остановить совпадение в этом месте:

(?<=test\s:\s).*(?=\.|\s)

Два \s в (?<=test\s:\s) будут «обрезать» совпадение. Следите за .match(), так как он будет искать только совпадение в начале строки (Авинаш алейди указал на это, но это очень важная нота!) [/ ​​G3]

См. demo

Пример кода :

import re
p = re.compile(ur'(?<=test\s:\s).*(?=\.|\s)')
test_str = u"test : match this."
print re.search(p, test_str).group()
2
ответ дан Wiktor Stribiżew 17 August 2018 в 12:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: