Регулярное выражение для текста в скобках и текста между точками с запятой - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть следующая форма строки: PW[Yasui Chitetsu];и хотел бы получить только имя в скобках: Yasui Chitetsu.Я пытаюсь что-то вроде

[^(PW\[)](.*)[^\]]

как регулярное выражение, но последняя скобка все еще в нем.Как мне отменить это?Я не думаю, что мне нужно что-то необычное, как смотреть сзади и т. Д., Для этого случая.

1 Ответ

0 голосов
/ 17 декабря 2018

Проблемы с тем, что вы пробовали

Есть несколько проблем с тем, что вы пробовали:

  • Это пропустит первый и последний символы вашего матча изгруппа, которая дает вам что-то вроде asui Chitets.
  • . В строках, начинающихся с P или W, будет еще больше ошибок.Например, в PW[Paul McCartney] вы можете сопоставить только ul McCartne с группой и ul McCartney с полным соответствием.

Regex

Вы хотите что-то вроде этого:

(?<=\[)([^]]+)(?=\])

Вот демо regex101 .

Пояснение

(?<=\[) означает, что совпадению должно предшествовать [

([^]]+) соответствует 1 или более символам, которые не ]

(?=\]) означает, что за соответствием должен следовать ]

Образец кода

Вот пример кода (из приведенной выше ссылки на regex101):

# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility

import re

regex = r"(?<=\[)([^]]+)(?=\])"

test_str = "PW[Yasui Chitetsu]"

matches = re.finditer(regex, test_str, re.MULTILINE)

for matchNum, match in enumerate(matches):
    matchNum = matchNum + 1

    print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))

    for groupNum in range(0, len(match.groups())):
        groupNum = groupNum + 1

        print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))

# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.

Точки с запятой

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

(?<=;)([^;]+)(?=;)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...