Посоветуйте пожалуйста регулярное выражение Python - PullRequest
2 голосов
/ 19 марта 2020
message = <@U0104FGR7SL> test111 <@U0106LSJ> test33

Выше приведена строка.

На основе ссылочной буквы, соответствующей шаблону <@U ......>

Я хочу разделить text.

Я бы хотел вырезать его по шаблону.

regex = re.compile("<@U[^>]+>")

match = regex.split (message)

Если я это сделаю, я получу "test, test22"

<@U0104FGR7SL> test111 
<@U0106LSJ> test33

Я хотел бы разделить это так.

Пожалуйста, посоветуйте мне, что делать.

Ответы [ 3 ]

0 голосов
/ 19 марта 2020

Еще один - использование более нового модуля regex, который поддерживает разбиение по сторонам:

import regex as re

string = "<@U0104FGR7SL> test111 <@U0106LSJ> test33"
parts = re.split(r'(?<!\A)(?=<@)', string)
print(parts)

Это дает

['<@U0104FGR7SL> test111 ', '<@U0106LSJ> test33']

См. демонстрацию на regex101 .com .

0 голосов
/ 19 марта 2020

Вы можете использовать любое из двух решений re.split:

re.split(r'\s+(?=<@U[^>]+>)', message)    # Any Python version, if matches are whitespace separated
[x.strip() for x in re.split(r'(?=<@U[^>]+>)', message) if x] # Starting with Python 3.7

ПРИМЕЧАНИЕ. В Python 3.7 окончательно было установлено re.split для разделения на пустые совпадения.

Подробности

  • \s+ - 1+ пробелов
  • (?=<@U[^>]+>) - положительный прогноз, требующий <@U, 1+ символы, отличные от >, а затем > сразу справа от текущего местоположения.

См. Python demo :

import re
message = '<@U0104FGR7SL> test111 <@U0106LSJ> test33'
print ( re.split(r'\s+(?=<@U[^>]+>)', message) )
# => '<@U0104FGR7SL> test111', '<@U0106LSJ> test33']
print ( [x.strip() for x in re.split(r'(?=<@U[^>]+>)', message) if x] )
# => '<@U0104FGR7SL> test111', '<@U0106LSJ> test33']
0 голосов
/ 19 марта 2020

Вы можете сделать следующее:

import re
message = "<@U0104FGR7SL> test111 <@U0106LSJ> test33"
matches = re.findall("<\S+>\s\S+", message)
for x in matches:
    print(x)
# <@U0104FGR7SL> test111
# <@U0106LSJ> test33
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...