2016-07-28 11 views
1

У меня есть строка, как: The old man $went$ to the $barn$. Как бы преобразовать это The old man ~!went! to the ~!barn!.Regex заменить пары доллара подписывает

Если мне не нужно, чтобы добавить ~ перед первым появлением, я мог бы просто сделать text.replace('$', '!') в Python.

+0

're.sub (г '\ $ (\ W +) \ $ ', r' ~! \ 1! ', s) ' –

+0

Или другой, соответствующий только долларам, если они находятся внутри границ слов:' re.sub (r' \ $ \ b ([^ $] +) \ b \ $ ', r' ~! \ 1! ', s) '. Есть ли у вас какой-либо из них или какие-либо ответы ниже? –

ответ

1

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

Так что регулярное выражение будет:

\$([^$]*)\$ 

И тогда замена строки будет:

~!\1! 

Regex101 Demo

+0

Чтобы уточнить, разница между использованием '. *?' И '[^ $] *' заключается в том, что первый «ленивый», а второй - «жадный». Жадные кванторы выполняются быстрее, поскольку они не требуют попыток сопоставить остальное регулярное выражение для каждого символа. (12 шагов против 28 шагов) – 4castle

1

Да, регулярное выражение этого. Группы захвата помогут.

result = re.sub(r'\$(.*?)\$', r'~!\1!', my_str) 
+0

Знаки доллара не сбежали. – RamenChef

+0

@Ramen Извините за это! – nicael

1

Возможно регулярное выражение отлов группа путь здесь, но вот простой способ сделать это без регулярных выражений:

>>> s 
'The old man $went$ to the $barn$' 
>>> r 
'' 
>>> seen = False 
>>> 
>>> for c in s: 
     if c=='$': 
      if seen: 
       r +='!' 
       seen = False 
      else: 
       r +='~!' 
       seen=True 
     else: 
      r += c 


>>> r 
'The old man ~!went! to the ~!barn!' 

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

  • Нет связанных вопросов^_^