Замените каждую нечетную запятую двоеточием - Regex - PullRequest
0 голосов
/ 21 сентября 2019

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

Например,

"[2, 0.2520474110789976, 8, 0.25215388264234934, 3, 0.3560689678084889, 1, 0.3573715347893714, 4, 0.5626369616327825, 5, 0.793617535995843]"

преобразуется в

"[2: 0.2520474110789976, 8: 0.25215388264234934, 3: 0.3560689678084889, 1: 0.3573715347893714, 4: 0.5626369616327825, 5: 0.793617535995843]"

Iперешел другие вопросы на StackOverflow и нашел следующий вопрос.Тем не менее, версия JS не работает в Python.

Regex - заменить все нечетные вхождения запятой

Я сделал следующее, основываясь на ссылке выше

pattern = "(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)(,)(.*?,|)(?=.*?(?:,|$))"
stringa = re.sub(pattern,": ",flat_list_string)

и получил вывод

"2:  8:  3:  1:  4:  5:  0.793617535995843"

вместо того, что упоминалось ранее.

Я довольно новичок в Regex, поэтому сам не пробовал.Буду признателен за любую помощь.Спасибо.

Обновление1: вставил мой неверный вывод

Ответы [ 2 ]

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

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

pattern = r"(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)(,)(.*?,|)(?=.*?(?:,|$))"

Далее вам следует заменить строку замены на r":\2", что означает : затем группа 2. Регулярное выражение соответствует каждой нечетной запятой, а также всем символам после нее до следующей четной запятой.Он помещает все это в группу 2. Замена на : также заменит все эти совпадающие символы.

stringa = re.sub(pattern, r":\2",flat_list_string)

Регулярное выражение JS также обрабатывает запятые в кавычках, которые не нужны ОП другого сообщения.рассмотреть, например:

"hello, world", 1, "bye, world", 2
      ^.               ^
these should not be counted as commas

Если вы хотите посчитать эти запятые, вы можете использовать это регулярное выражение:

,([^,]+(?:,|$))

и заменить на :\1.

1 голос
/ 21 сентября 2019

Вы можете достичь того же результата с помощью этого простого регулярного выражения

re.sub(r'(\b\d{1,2}),',r'\g<1>:',search_string)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...