负正则表达式匹配

时间:2018-10-26 07:57:41

标签: regex python-2.7

我想用*替换字符串中的所有.(之前没有.*)。

预期结果-

  1. foo *-> foo。*
  2. foo。*-> foo。*

我尝试re.sub("(?!\.)\*", ".*", "foo*")替换所有此类情况,但这似乎不起作用。

>>> re.sub("(?!\.)\*", ".*", "foo.*")
   'foo..*'

我在这里缺少什么的帮助吗?

3 个答案:

答案 0 :(得分:2)

您可以使用negative lookbehind (?<!\.)断言左侧不是点:

(?<!\.)(\*)

Regex demo

例如:

test_str = """foo*
foo.*
"""
result = re.sub(r"(?<!\.)(\*)", r".\1", test_str)
print (result)

结果

foo.*
foo.*

答案 1 :(得分:2)

您正在使用一个负数。 先行(?!...)),而不是先行(?<!...)),请参阅

import re

string = """
foo* --> foo.*
foo.* --> foo.*
"""

rx = re.compile(r'(?<!\.)\*')

string = rx.sub('.*', string)
print(string)

还有a demo on regex101.com

答案 2 :(得分:0)

您是否尝试过这样做:

[^\.]\*