2013-02-14 3 views
0

Я пытаюсь получить все слова, которые содержат в себе как минимум 1 знак препинания (или любой ненулевой, не буквенно-цифровой символ) в начале, середине и/или конце. Так, например, в этом предложенииRegex, чтобы поймать хотя бы 1 символ пунктуации в слове

this is a wo!rd right !and| other| hello |other 

регулярное выражение будет возвращать

wo!rd !and| other| |other 

ответ

8

Вы можете использовать это:

>>> sentence = "this is a wo!rd right !and| other| hello |other" 

>>> import re 

>>> re.findall("\S*[^\w\s]\S*", sentence) 
['wo!rd', '!and|', 'other|', '|other'] 

Найдет все эти слова, содержащие по меньшей мере 1 non-word, non-space характер. \S такой же, как [^\s].

Regex Объяснение:

\S*  # Match 0 or more non-space character 
[^\w\s] # Match 1 non-space non-word character 
\S*  # Match 0 or more non-space character 
+0

ничего плохого с помощью \ ш * [^ \ ш \ s] \ ш * вместо этого? – Sofia

+0

@sofia. Да. Он будет соответствовать только 'и |' в '! And \'. '!' будет соответствовать '\ S', но не' \ w'. –

+0

Да, ты прав. Благодаря :) – Sofia

Смежные вопросы