Python:re.sub模式和替换通配符

时间:2013-05-28 13:47:11

标签: python design-patterns replace

我一直在使用这段代码,似乎是一辈子的事情,似乎无法让它发挥作用。

pattern = "\[([a-zA-Z0-9].*?)#([a-zA-Z0-9].*?)\]"
pattern_obj = re.compile(pattern, re.MULTILINE)
translation = pattern_obj.sub("<ol>\\1</ol>", translation)

我在这里要做的是改变一些文字,即:

[ 
  # This is item number one in an ordered list. #

  # And this is item number two in the same list. #
]

分为:

<ol> 
#This is item number one in an ordered list. #
#And this is item number two in the same list. #
</ol>

基本上,它应该识别[和]之间的任何文本与文本中的#where,并将[into <ol>和]更改为</ol>,同时保持所有内部文本相同。任何人都可以建议吗?

提前谢谢!

1 个答案:

答案 0 :(得分:0)

这几乎可以满足您的需求:

>>> re.compile(r"\[([^\]]*)\]").sub("<ol>\\1</ol>", "b[#a]c")
'b<ol>#a</ol>c'

[^\]]\[ clsing括号后面的每个字符除外。

使用#,它看起来像这样:

>>> re.compile(r"\[([^\]]*#[^\]]*)\]").sub("<ol>\\1</ol>", "b[#a]c")
'b<ol>#a</ol>c'
>>> re.compile(r"\[([^\]]*#[^\]]*)\]").sub("<ol>\\1</ol>", "b[gggg]c")
'b[gggg]c'

如果你想在某些东西之间找到某种东西,.总是有点问题。