天宫鹤

Python正则表达式替换(sub)中如何使用替换函数

# 中文冒号(比例除外)替换为英文冒号
def sub_the_chinese_colon_of_the_question_number(_lines: str) -> str:
"""
:param _lines:清理后的文本文件内容
功能:查找并替换题号后的中文冒号为英文冒号。
"""

# 定义替换函数,用于调用re.sub:
def replacement(match) -> str:
"""
:param match:匹配对象
功能:保持匹配对象中比例的中文冒号,其他替换为英文冒号。
假设:中文冒号后内容三种可能情况:1)非数字,如:企业员工应;(替换)
2)数字年份,如:2001年/12月15日;(替换)
3)比例,如:1:1。(保持)
"""
group0 = match.group(0) # 整个匹配表达式
pat_match = re.compile(r'\D|\d+[年月]') # 编译正则表达式
if pat_match.match(match.group(1)): # 匹配中文冒号后为非数字/数字年份
print(f'{Fore.LIGHTGREEN_EX}已替换“{group0}”(:后为非数字/数字年份)', end='。')
ou.print_current_line_number() # 打印当前行号
group0 = group0.replace(':', ':') # 中文冒号替换为英文冒号
else: # 比例,保持中文冒号
print(f'{Fore.LIGHTYELLOW_EX}未替换“{group0}”(比例中的“:”)', end='。')
ou.print_current_line_number() # 打印当前行号
return group0

pat_sub = re.compile(r'\d{1,3}:(.{5})') # 匹配数字:(中文冒号),取5个任意文字是为了年份(2001年)
return pat_sub.sub(replacement, _lines)

# 可使用以下更简单的方式 2024年9月4日
# pat_sub = re.compile(r'(\d{1,3}):(\D|\d+[年月])') # 匹配题号:,包括后跟2001年/12月15日,排除比例
# return pat_sub.sub(r'\g<1>:\g<2>', _lines)

posted on 2024-09-03 11:21  GoGrid  阅读(115)  评论(0编辑  收藏  举报

导航