Я пытаюсь сломать строку на всех шаблонах, отличных от слов, кроме. (точка)
Обычно я предполагаю, что это можно сделать как [\ W ^ [.]] В java, но как это сделать в python?
>>> import re
>>> the_string="http://hello-world.com"
>>> re.findall(r'[\w.]+',the_string)
['http', 'hello', 'world.com']
Очень хорошая ссылка для модуля регулярного выражения Python доступна здесь. Следующее должно сделать трюк для вас.
import re
re.split(r'[\w.]+', text_string)
Или
import re
re.findall('[^\w.]+', text_string)
text_string="foo|bar."
Синтаксис Java отключен, для начала. Это то, к чему вы пытались:
[\W&&[^.]]
Это соответствует символу пересечения множеств, описанных "любым символом, отличным от слова", и "любым символом, кроме .
". Но это излишне, когда вы можете просто использовать:
[^\w.]
... или "любой символ, который не является символом слова или .
". Это то же самое в Python (и в большинстве других вкусов), хотя вы, вероятно, хотите сопоставить один или несколько символов:
re.split(r'[^\w.]+', the_string)
Но, вероятно, проще использовать подход @gnibbler для согласования частей, которые вы хотите сохранить, а не те, которые вы хотите выбросить:
re.findall(r'[\w.]+', the_string)
Я предполагаю, что вы хотите разделить строку на все шаблоны, отличные от слов, кроме точки.
Изменить: Python не поддерживает синтаксис regex в стиле Java, который вы используете. Я бы предложил сначала заменить все точки длинной строкой, затем разбить строку, а затем снова положить точки.
import re
long_str = "ABCDEFGH"
str = str.replace('.', long_str)
result = re.split(r'\W', str)
Затем, когда вы используете result
, снова замените все последовательности long_str
точкой.
Это очень плохое решение, но оно работает.
У Python есть удобная функция для этого
>>> s = "ab.cd.ef.gh"
>>> s.split(".")
['ab', 'cd', 'ef', 'gh']
[\w^[.]]
для разделителей, а[\w.]+
для слов, поэтому мы называемfindall
.