Попробуйте разбить строку с определенным выражением регулярного выражения - PullRequest
1 голос
/ 09 апреля 2020

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

"test 10 20 middle 30 - 40 mm".

, и я хотел бы разбить на ["test 10", "20 middle 30", "40 mm" «]. Итак, разделение сбрасывает '-' и пробел между 2 цифрами. Я пытался сделать

result = re.split(r'[\d+] [\d+]', s)
> ['test 1', '0 middle 30 - 40 mm']

result2 = re.split(r' - |{\d+} {\d+}', s)
> ['test 10 20 middle 30', '40 mm']

Есть ли какое-либо выражение для разбиения в ['test 10', '20 middle 30 ', '40 mm']?

Ответы [ 2 ]

2 голосов
/ 09 апреля 2020

Вы можете использовать

(?<=\d)\s+(?:-\s+)?(?=\d)

См. Демоверсию regex .

Подробности

  • (?<=\d) - ди git должен появиться сразу слева
  • \s+ - 1+ пробелов
  • (?:-\s+)? - необязательная последовательность - с последующими 1+ пробелами
  • (?=\d) - сразу справа должен появиться ди git.

См. Демоверсию Python :

import re
text = "test 10 20 middle 30 - 40 mm"
print( re.split(r'(?<=\d)\s+(?:-\s+)?(?=\d)', text) )
# => ['test 10', '20 middle 30', '40 mm']
1 голос
/ 09 апреля 2020

Данные

k="test 10 20 middle 30 - 40 mm"

Пожалуйста, попробуйте

result2 = re.split(r"(^[a-z]+\s\d+|\^d+\s[a-z]+|\d+)$",k)
result2

**^[a-z]** - сопоставьте строчные буквы в начале строки и жадно влево +, за которыми следуют:

 **`\s`** white space characters
 **`\d`** digits greedily matched to the left

| или сопоставление начала строки с цифрами \d+, также сопоставляемыми жадно влево и сопровождаемыми:

  `**\s**` white space characters
   **`a-z`** lower case alphabets greedily matched to the left

| или жадно совмещать цифры слева \d+ конец строки $

Вывод enter image description here

...