2010-02-16 2 views
1

В программе, которую я делаю на python, и я хочу, чтобы все слова, отформатированные как __word__, выделялись. Как я могу искать такие слова, используя регулярное выражение?Создайте Reg Exp для поиска __word__?

ответ

4

Может быть что-то вроде

\b__(\S+)__\b 

>>> import re 
>>> re.findall(r"\b__(\S+)__\b","Here __is__ a __test__ sentence") 
['is', 'test']  
>>> re.findall(r"\b__(\S+)__\b","__Here__ is a test __sentence__") 
['Here', 'sentence'] 
>>> re.findall(r"\b__(\S+)__\b","__Here's__ a test __sentence__") 
["Here's", 'sentence'] 

или вы можете поместить теги вокруг этого слова

>>> print re.sub(r"\b(__)(\S+)(__)\b",r"<b>\2<\\b>","__Here__ is a test __sentence__") 
<b>Here<\b> is a test <b>sentence<\b> 

Если вам нужно больше мелкозернистого контроль над юридическими символами слова, лучше быть явным

\b__([a-zA-Z0-9_':])__\b ### count "'" and ":" as part of words 

>>> re.findall(r"\b__([a-zA-Z0-9_']+)__\b","__Here's__ a test __sentence:__") 
["Here's"] 
>>> re.findall(r"\b__([a-zA-Z0-9_':]+)__\b","__Here's__ a test __sentence:__") 
["Here's", 'sentence:'] 
+0

Эта работа отлично работала для моих нужд. –

+0

'\ S' будет соответствовать любому символу пробела (включая символы), поэтому' .__ + __. 'Будет сопоставлен. – Amarghosh

+1

@Amarghosh, ОП не указывал, что означает «слово», поэтому я интерпретировал его как строку символов без пробелов. Конечно, вы можете использовать '\ w' вместо' \ S', но тогда слова типа «__Here's__» будут разбиты –

1

Возьмите squizz здесь: http://docs.python.org/library/re.html

Это должно показать вам синтаксис и примеры, из которых можно построить чек на слово (а) до и после-затрачиваемого 2 подчеркивания.

0

Самое простое регулярное выражение для этого было бы

__.+__ 


Если вы хотите получить доступ к самому слову из вашего кода, вы должны использовать

__(.+)__ 
+2

это звучит слишком жадными –

+0

'__ __' возможно – bernie

+0

Даниил (+.?) - на 'привет __world__ позволяет съесть __pizza__', ваше регулярное выражение будет захватывать' __world__ позволяет съесть __pizza__'. – Kobi

0

Это даст вам список всех таких слов

>>> import re 
>>> m = re.findall("(__\w+__)", "What __word__ you search __for__") 
>>> print m 
['__word__', '__for__'] 
0
\b(__\w+__)\b 

\b граница слова
\w+ один или несколько символов слова - [a-zA-Z0-9_]

0

простые строковые функции. нет регулярных выражений

>>> mystring="blah __word__ blah __word2__" 
>>> for item in mystring.split(): 
...  if item.startswith("__") and item.endswith("__"): 
...  print item 
... 
__word__ 
__word2__ 
Смежные вопросы