Python компилирует все не слова, кроме точки [.]

1

Я пытаюсь сломать строку на всех шаблонах, отличных от слов, кроме. (точка)
Обычно я предполагаю, что это можно сделать как [\ W ^ [.]] В java, но как это сделать в python?

Теги:

5 ответов

3
Лучший ответ
>>> import re
>>> the_string="http://hello-world.com"
>>> re.findall(r'[\w.]+',the_string)
['http', 'hello', 'world.com']
  • 0
    Просто отлично, спасибо :) не могли бы вы объяснить мне это?
  • 1
    [\w^[.]] для разделителей, а [\w.]+ для слов, поэтому мы называем findall .
1

Очень хорошая ссылка для модуля регулярного выражения Python доступна здесь. Следующее должно сделать трюк для вас.

import re
re.split(r'[\w.]+', text_string)

Или

import re
re.findall('[^\w.]+', text_string)
  • 0
    попробуйте text_string="foo|bar."
  • 0
    @Ashish, нет: почти каждый спецсимвол «отключен» внутри «наборов» (т. Е. Между скобками) в шаблоне, и, в частности, так же, как и вертикальная черта (в том смысле, в каком она «или» имеет внешние скобки).
Показать ещё 4 комментария
0

Синтаксис Java отключен, для начала. Это то, к чему вы пытались:

[\W&&[^.]]

Это соответствует символу пересечения множеств, описанных "любым символом, отличным от слова", и "любым символом, кроме .". Но это излишне, когда вы можете просто использовать:

[^\w.]

... или "любой символ, который не является символом слова или .". Это то же самое в Python (и в большинстве других вкусов), хотя вы, вероятно, хотите сопоставить один или несколько символов:

re.split(r'[^\w.]+', the_string)

Но, вероятно, проще использовать подход @gnibbler для согласования частей, которые вы хотите сохранить, а не те, которые вы хотите выбросить:

re.findall(r'[\w.]+', the_string)
  • 0
    Спасибо Алан, это действительно полезно
0

Я предполагаю, что вы хотите разделить строку на все шаблоны, отличные от слов, кроме точки.

Изменить: Python не поддерживает синтаксис regex в стиле Java, который вы используете. Я бы предложил сначала заменить все точки длинной строкой, затем разбить строку, а затем снова положить точки.

import re
long_str = "ABCDEFGH"
str = str.replace('.', long_str)
result = re.split(r'\W', str)

Затем, когда вы используете result, снова замените все последовательности long_str точкой.

Это очень плохое решение, но оно работает.

0

У Python есть удобная функция для этого

>>> s = "ab.cd.ef.gh"
>>> s.split(".")
['ab', 'cd', 'ef', 'gh']
  • 2
    И как это помогает ОП со "всеми шаблонами не из слов, кроме точки" ?! Это разделяет только точка - полюсы, кроме того, что спросил ОП.
  • 0
    D'о! Действительно, поляки У меня еще не было кофе. Прости за это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню