Как заменить одно письмо, не подставляя другие?

Алгоритм Дейкстры предполагает, что пути могут только стать «более тяжелыми», так что если у вас есть путь от А до В с весом 3 и путь от А до С с весом 3, вы не можете добавить ребро и получить от A до B через C с весом менее 3.

Это предположение делает алгоритм быстрее, чем алгоритмы, которые должны принимать отрицательные веса.

3
задан Selcuk 16 January 2019 в 02:41
поделиться

3 ответа

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

>>> text = "I need help. I need 5.4 dollar."
>>> re.sub(r'(?<=\D)\.', '\n', text)
'I need help\n I need 5.4 dollar\n'

В этом случае (?<=\D) утверждает, что символ перед литералом . не является цифрой. [115 ]

0
ответ дан dawg 16 January 2019 в 02:41
поделиться

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

«Заменить все периоды символами новой строки, если только период не является частью числа».

И чтобы сделать это еще более точным, определим Что это означает, что точка является частью числа: это, вероятно, означает, что за ним непосредственно следует число, так что оно соответствует 5.4, но также .4 в The average score of .4 was low., но не 4. в She only counted a total of 4.. ]

«Заменить все периоды символами новой строки, если за точкой сразу не следует цифра».

import re

text = '"I have .5 dollar. I need 5.4 dollar. But they only gave me 3."'

expression = re.compile(r'\.(?!\d)')
print(expression.sub('\n', text))

Вместо этого ваш пример \D(\.) соответствовал: «Соответствует одному символу это не цифра, за которой следует буквальное . ", которое вы не хотели заменить.

Новое выражение \.(?!\d) соответствует «Соответствует литералу ., но только если за ним не следует цифра». Он использует то, что называется негативным взглядом, подробнее об этом здесь https://www.regular-expressions.info/lookaround.html

0
ответ дан Grismar 16 January 2019 в 02:41
поделиться

В этом конкретном примере вы можете использовать метасимвол regex \ b, чтобы соответствовать началу или концу слова (граница слова)

import re

text = "I need help. I need 5.4 dollar."

a = re.compile('\b(\.)')
print(a.sub('\n',text))
0
ответ дан Roger Wang 16 January 2019 в 02:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: