给定一个字符串,例如:
"The user foo_bar has a Twitter account: https://twitter.com/foo_bar"
为了通过Telegram机器人API以markdown模式发送,其格式应为:
"The user foo\_bar has a Twitter account: [https://twitter.com/foo_bar]"
([]
可以使用正则表达式添加到url)。
是否可以在Python中编写一个可以转义某些字符(例如_
或*
在文本中)的函数,但是仅当这些字符不包含在URL中时才可以?
这是一个不检查字符位置的示例:
original_text = 'The user foo_bar has a Twitter account: https://twitter.com/foo_bar'
formatting_url = re.sub(
'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', r'[\g<0>]', original_text)
escaping_char = formatting_url.replace('*', '\*').replace('_', '\_')
print(escaping_char)
输出:
The user foo\_bar has a Twitter account: [https://twitter.com/foo\_bar]
_
网址中的in也将被替换。
首先使用正则表达式将括号添加到URL。然后,您可以遍历字符串的每个字母,并在网址之外的任何时候看到一个转义字符。每当看到字符[或]来知道自己是否在url中时,都可以举一个标志:
s = "The user foo_bar has a Twitter account: [https://twitter.com/foo_bar]"
in_url = False
output = ""
for letter in s:
if letter == "[":
in_url = True
output += letter
elif letter == "]":
in_url = False
output += letter
elif letter == "_":
if in_url:
output += "_"
else:
output += "\_"
else:
output += letter
print(output)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句