Разделить строку без не-символов - PullRequest
4 голосов
/ 12 февраля 2012

Я пытаюсь разбить строку, которая выглядит следующим образом:

':foo [bar]'

Использование str.split() для этого конечно возвращает [':foo','[bar]']

Но как я могу заставить его вернуть только ['foo','bar'], содержащий только эти символы?

Ответы [ 4 ]

11 голосов
/ 12 февраля 2012

Мне не нравятся регулярные выражения, но мне нравится Python, поэтому я бы, наверное, написал это как

>>> s = ':foo [bar]'
>>> ''.join(c for c in s if c.isalnum() or c.isspace())
'foo bar'
>>> ''.join(c for c in s if c.isalnum() or c.isspace()).split()
['foo', 'bar']

. '. .Jin идиома немного странная, я признаю, но вы можетепочти все остальное на английском: «соединяйте каждый символ для символов в s, если символ является буквенно-цифровым или символ пробелом, а затем разделяйте его».

Либо, если вы знаете, что символы, которые вы хотитеУдалить всегда будет снаружи, и слово будет по-прежнему разделено пробелами, и вы знаете, что они есть, вы можете попробовать что-то вроде

>>> s = ':foo [bar]'
>>> s.split()
[':foo', '[bar]']
>>> [word.strip(':[]') for word in s.split()]
['foo', 'bar']
1 голос
/ 12 февраля 2012

Выполните str.split() как обычно, а затем проанализируйте каждый элемент, чтобы удалить не буквы.Что-то вроде:

>>> my_string = ':foo [bar]'
>>> parts = [''.join(c for c in s if c.isalpha()) for s in my_string.split()]
['foo', 'bar']
0 голосов
/ 12 февраля 2012

Вы должны попробовать регулярные выражения .

Используйте re.sub () для замены :,[,] символов, а затем разделите результирующую строку на white space в качестве разделителя.

>>> st = ':foo [bar]'
>>> import re
>>> new_st = re.sub(r'[\[\]:]','',st)
>>> new_st.split(' ')
['foo', 'bar']
0 голосов
/ 12 февраля 2012

Вам придется пройти через список ['foo','[bar]'] и удалить все не буквенные символы, используя регулярные выражения.Проверьте Regex replace (в Python) - более простой способ? для примеров и ссылок на документацию.

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