Разделить строку с разделителем регулярных выражений в python - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть следующая строка:

txt='agadsfa_(2asdf_sdfsaf)asfsadf[adsf_klnalfk;jn234kmafs)adfs,nlnawr23'

Это разделитель:

delimiters = " \t,;.?!-:@[](){}_*/"

В качестве вывода я хочу этот список значений:

"agadsfa","2asdf","sdfsaf","asfsadf","adsf","klnalfk","jn234kmafs","adfs","nlnawr23"

Я пытался использовать регулярное выражение:

re.split(delimiters,txt)

Но я получаю эту ошибку:

re.error: unterminated character set at position 10

Что здесь не так?

Ответы [ 4 ]

0 голосов
/ 01 февраля 2019

Код Python 3

import re

txt="agadsfa_(2asdf_sdfsaf)asfsadf[adsf_klnalfk;jn234kmafs)adfs,nlnawr23"

delimiters = "_|;|,|\)|\(|\[|\]"

list(filter(None, re.split(delimiters, txt)))

Выход

['agadsfa', '2asdf', 'sdfsaf', 'asfsadf', 'adsf', 'klnalfk', 'jn234kmafs', 'adfs', 'nlnawr23']

Разделите ваши символы с помощью |и использовать функцию фильтра списка питонов, чтобы избежать пустых строк

0 голосов
/ 01 февраля 2019

Вы должны разделить разделители, используя |:

delimiters = r' |\t|,|;|\.|\?|!|-|:|@|\[|\]|\(|\)|\{|\}|_|\*|/'
# then use this to eliminate empty strings if you have two delimiters next to each other
print([w for w in re.split(delimiters,txt) if w])   
# or list(filter(lambda a: a, re.split(delimiters,txt)))

Результат:

['agadsfa', '2asdf', 'sdfsaf', 'asfsadf', 'adsf', 'klnalfk', 'jn234kmafs', 'adfs', 'nlnawr23']
0 голосов
/ 01 февраля 2019

попробуйте это:

import re

txt = "agadsfa_(2asdf_sdfsaf)asfs?adf[adsf_klna!lfk;jn234kmafs)adfs, nlnawr*23"

line = re.sub(
           r"[ \t,;\.?!\-:@\[\](){}_*/]+", 
           r",", 
           txt
       )

print(line.split(","))
0 голосов
/ 01 февраля 2019

Ваше регулярное выражение неверно.А из комментариев вы добавили требование, чтобы к строке delimiters не прикасались.

Что нам нужно сделать, это обработать входную строку и преобразовать ее в правильное регулярное выражение, котороеможет использоваться split().Вот как:

# need to enclose regex in [], we want to split on any of
# the chars; also some of the chars need to be escaped    
delimiters = ' \t,;.?!-:@[](){}_*/'
regex = delimiters.replace(']', '\]').replace('-', '\-')
regex = r'[{}]+'.format(regex)

Результат, как и ожидалось:

txt = 'agadsfa_(2asdf_sdfsaf)asfsadf[adsf_klnalfk;jn234kmafs)adfs,nlnawr23'
re.split(regex, txt)
=> ['agadsfa', '2asdf', 'sdfsaf', 'asfsadf', 'adsf', 'klnalfk', 'jn234kmafs', 'adfs', 'nlnawr23']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...