Регулярное выражение Python для поиска и замены нескольких совпадений - PullRequest
1 голос
/ 19 сентября 2019

У меня есть следующая строка, которая может содержать любое количество пробелов после первого [или перед последним]:

my_string = " [  0.53119281  1.53762345  ]"

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

my_regex_start = "(\[\s+)" #Find square bracket and any number of white spaces
replaced_1 = re.sub(my_regex_start, '[', my_string) --> "[0.53119281  -0.16633733  ]"

my_regex_end = "(\s+\])" #Find any number of white spaces and a square bracket
replaced_2 = re.sub(my_regex_end, ']', my_string) -->" [   0.53119281  -0.16633733]"

У меня есть регулярное выражение, которое находит одно ИЛИ другое:

my_regex_both = "(\[\s+)|(\s+\])" ##Find square bracket and any number of white spaces OR ny number of white spaces and a square bracket

Как я могу использовать my_regex_both для замены первого и ИЛИвторой, если таковые имеются или оба найдены?

Ответы [ 2 ]

2 голосов
/ 19 сентября 2019

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

import re

my_string = "[  0.53119281  1.53762345  ]"

my_regex_both = r"(?<=\[)\s+|\s+(?=\])"

replaced = re.sub(my_regex_both, '', my_string)

print(replaced)

Вывод:

[0.53119281  1.53762345]
0 голосов
/ 19 сентября 2019

Другой вариант, который вы можете использовать помимо ответа MrGeek, - использовать группу захвата, чтобы перехватить все между вашими my_regex_start и my_regex_end, например:

import re

string1 = " [  0.53119281  1.53762345  ]"

result = re.sub(r"(\[\s+)(.*?)(\s+\])", r"[\2]", string1)
print(result)

Я только что зажал (.*?)между вашими двумя выражениями.Это будет лениво ловить то, что между ними можно использовать с \2

ВЫХОД

[0.53119281  1.53762345]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...