Проблемы с тем, что вы пробовали
Есть несколько проблем с тем, что вы пробовали:
- Это пропустит первый и последний символы вашего матча изгруппа, которая дает вам что-то вроде
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.
Точки с запятой
В своем заголовке вы упомянули поиск текста между точками с запятой.Та же самая логика будет работать для этого, давая вам это регулярное выражение:
(?<=;)([^;]+)(?=;)