使用Python处理字符串的时候,有很多时候只需要字符串的一小部分,而不需要中间的标识符。
比如“text#你好,世界#”,只需要里面的中文文字。
这种时候,常规的做法是,先以#为标识,提取出#你好,世界#,然后再提取出“你好,世界”。
然而这种情况很多,每次都这样繁琐地提取,有违Python的简洁优雅。
所以我将这部分正则表达式封装了一个函数,方便调用。
结果发现意外地好用,大多数情况都可以用上,几乎不用写正则表达式了。
def cut_content(content,start,end):
"""
# 清理边角,截取首尾中间部分
:param content:原文本
:param start:开始的标志
:param end:结束的标志
:return:中间的部分
"""
start_store = start #用于最后的字符串分割,防止增加转义符后,长度不对
end_store = end
new_string = ""
# 将start以及end里面的特殊字符全部转意
for item in start:
# .^$*+?[]|{}()等符号要加\转义
if not re.search(r"[\.\^\$\*\+\?\[\]\|\{\}\(\)]", item) is None:
new_string += "\\"
new_string += item
start = new_string
new_string = ""
for item in end:
if not re.search(r"[\.\^\$\*\+\?\[\]\|\{\}\(\)]", item) is None:
new_string += "\\"
new_string += item
end = new_string
_str = ""
try:
_str = re.search(start + "(.|\n)*", content).group()
if end != "":
_str = re.search(start + "(.|\n)*?" + end, _str).group()
# 去除多出来的前后缀
_str = _str[len(start_store):len(_str)]
if end != "":
_str = _str[:len(_str)-len(end_store)]
except:
return None
return _str
text = cut_content("text#你好,世界#", "#", "#")
简单地调用一下函数,就可以直接轻松获得中间的"你好,世界"。
最后附上完整实例,可以直接复制使用
# coding: utf-8
import re
def cut_content(content,start,end):
"""
# 清理边角,截取首尾中间部分
:param content:原文本
:param start:开始的标志
:param end:结束的标志
:return:中间的部分
"""
start_store = start #用于最后的字符串分割,防止增加转义符后,长度不对
end_store = end
new_string = ""
# 将start以及end里面的特殊字符全部转意
for item in start:
# .^$*+?[]|{}()等符号要加\转义
if not re.search(r"[\.\^\$\*\+\?\[\]\|\{\}\(\)]", item) is None:
new_string += "\\"
new_string += item
start = new_string
new_string = ""
for item in end:
if not re.search(r"[\.\^\$\*\+\?\[\]\|\{\}\(\)]", item) is None:
new_string += "\\"
new_string += item
end = new_string
_str = ""
try:
_str = re.search(start + "(.|\n)*", content).group()
if end != "":
_str = re.search(start + "(.|\n)*?" + end, _str).group()
# 去除多出来的前后缀
_str = _str[len(start_store):len(_str)]
if end != "":
_str = _str[:len(_str)-len(end_store)]
except:
return None
return _str
if __name__ == '__main__':
content = "现在是北京时间18点15分。"
text = cut_content(content,"北京时间","。")
print("现在的时间为:" + text)