Строка регулярного выражения Python для списка слов (включая слова с дефисами) - PullRequest
3 голосов
/ 04 августа 2010

Я хотел бы проанализировать строку, чтобы получить список, включающий все слова (тоже дефис).Текущий код:

s = '-this is. A - sentence;one-word'
re.compile("\W+",re.UNICODE).split(s)

возвращает:

['', 'this', 'is', 'A', 'sentence', 'one', 'word']

, и я хочу, чтобы он вернулся:

['', 'this', 'is', 'A', 'sentence', 'one-word']

Ответы [ 5 ]

4 голосов
/ 04 августа 2010

Если вам не нужна начальная пустая строка, вы можете использовать шаблон \w(?:[-\w]*\w)? для соответствия :

>>> import re
>>> s = '-this is. A - sentence;one-word'
>>> rx = re.compile(r'\w(?:[-\w]*\w)?')
>>> rx.findall(s)
['this', 'is', 'A', 'sentence', 'one-word']

Обратите внимание, что это не будет соответствовать словам с апострофами, как won't.

2 голосов
/ 04 августа 2010

Вот моя традиционная альтернатива "зачем использовать язык регулярных выражений, когда вы можете использовать Python":

import string
s = "-this is. A - sentence;one-word what's"
s = filter(None,[word.strip(string.punctuation)
                 for word in s.replace(';','; ').split()
                 ])
print s
""" Output:
['this', 'is', 'A', 'sentence', 'one-word', "what's"]
"""
1 голос
/ 04 августа 2010

s = "-this is. A - sentence;one-word what's"<br> re.findall("\w+-\w+|[\w']+",s)

Результат: ['this', 'is', 'A', 'предложение', 'одно слово', 'что есть']

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

1 голос
/ 04 августа 2010

Вы можете использовать "[^\w-]+" вместо.

0 голосов
/ 04 августа 2010

Йо можно попробовать с библиотекой NLTK:

>>> import nltk
>>> s = '-this is a - sentence;one-word'
>>> hyphen = r'(\w+\-\s?\w+)'
>>> wordr = r'(\w+)'
>>> r = "|".join([ hyphen, wordr])
>>> tokens = nltk.tokenize.regexp_tokenize(s,r)
>>> print tokens
['this', 'is', 'a', 'sentence', 'one-word']

Я нашел это здесь: http://www.cs.oberlin.edu/~jdonalds/333/lecture03.html Надеюсь, это поможет

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