Вставить пробел для разделения соединенных буквенных и числовых строк - Python RegEx - PullRequest
0 голосов
/ 30 ноября 2018

В Python мне нужно создать регулярное выражение, которое вставляет пробел между любыми объединенными комбинациями AlphaNum.Например, вот что я хочу:

8min15sec ==> 8 min 15 sec
7m12s ==> 7 m 12 s
15mi25s ==> 15 mi 25 s

Демонстрация RegEx101

Я не могу найти решения, найденные в Интернете, но они слишком сложны для меняразобрать / изменить.Например, у меня есть это:

[a-zA-Z][a-zA-Z\d]*

, но оно идентифицирует только первую точку вставки: 8Xmin15sec (X)

И это

(?<=[a-z])(?=[A-Z0-9])|(?<=[0-9])(?=[A-Z])

, но это тольконаходит эту точку: 8minX15sec (X)

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

RegEx101 demo (та же ссылка, что и выше)

Ответы [ 3 ]

0 голосов
/ 30 ноября 2018

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

(?<=\d)(?=[a-zA-Z])|(?<=[a-zA-Z])(?=\d)

Это регулярное выражение (?<=\d)(?=[a-zA-Z]) отмечает точкуположительный взгляд на алфавит и положительный взгляд на цифру.

Аналогично, (?<=[a-zA-Z])(?=\d) делает то же самое, но в обратном порядке.

А затем просто замените эту метку пробелом.

Демонстрация

Вот пример кода Python для того же.

import re
arr = ['8min15sec', '7m12s', '15mi25s']
for s in arr:
 print (s + ' --> ' + re.sub('(?<=\d)(?=[a-zA-Z])|(?<=[a-zA-Z])(?=\d)', ' ',s))

Который печатает после вывода,

8min15sec --> 8 min 15 sec
7m12s --> 7 m 12 s
15mi25s --> 15 mi 25 s
0 голосов
/ 30 ноября 2018

Как насчет следующего подхода:

import re

for test in ['8min15sec', '7m12s', '15mi25s']:
    print(re.sub(r'(\d+|\D+)', r'\1 ', test).strip())  

Что даст вам:

8 min 15 sec 
7 m 12 s 
15 mi 25 s
0 голосов
/ 30 ноября 2018

Как насчет:

"(\d+)([a-zA-Z]+)"

до

"\1 \2 "

https://regex101.com/r/yvqCtQ/2

А в питоне:

In [59]: re.sub(r'(\d+)([a-zA-Z]+)', r'\1 \2 ',  '8min15sec')
Out[59]: '8 min 15 sec '
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...