Jonathan Star 2024-05-24 16:26 采纳率: 73.8%
浏览 2

python 找到字符串里面所有的 第x章 第x编 第x节,如果后面是空格就加上回车,如果他们后面是回车就不变?

python 找到字符串里面所有的 第x章 第x编 第x节,如果后面是空格就加上回车,如果他们后面是回车就不变?
这个会在数字后面加回车,而不是章、节后面。 正则不会写

def add_newlines_after_chapters(text):
    """
    这个会在数字后面加回车,而不是章、节后面
    第三章
    -> 第三
    章
    """
    # 正则表达式匹配形如“第x章”、“第x编”、“第x节”,后面紧跟一个空格的字符串
    chinese_digits = r'零|一|二|三|四|五|六|七|八|九'
    pattern = rf'第{chinese_digits}+(?:章|编|节)(?=\s)'  # 确保后面是空格
    
    # 在匹配到的字符串后面添加换行符
    return re.sub(pattern, r'\g<0>\n', text)

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2024-05-24 16:26
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    要实现这个功能,我们可以稍微修改一下你的正则表达式。你的正则表达式已经正确地匹配了“第x章”、“第x编”、“第x节”这样的模式,并且使用了(?=\s)来确保后面紧跟着一个空格。但是,我们需要在替换时区分后面是空格还是换行符。

    我们可以使用正则表达式的捕获组和反向引用来实现这一点。捕获组(?<=...)用于查找某个模式之前的内容,而(?=...)用于查找某个模式之后的内容。我们可以利用(?<=\n)来检查“第x章”、“第x编”、“第x节”之前是否已经有换行符,如果没有,则在它们后面添加换行符。

    下面是修改后的代码:

    import re
    
    def add_newlines_after_chapters(text):
        """
        在字符串中的“第x章”、“第x编”、“第x节”后面添加换行符,
        如果它们后面已经是换行符,则保持不变。
        """
        # 正则表达式匹配形如“第x章”、“第x编”、“第x节”,后面紧跟一个空格的字符串
        # 检查后面是否不是换行符,如果不是,则在匹配到的字符串后面添加换行符
        pattern = r'(?<!\n)第(零|一|二|三|四|五|六|七|八|九)+(?:章|编|节)(?=\s)'
        
        # 在匹配到的字符串后面添加换行符
        return re.sub(pattern, r'\1\n', text)
    
    # 示例文本
    text = "这是第一章的内容。第 二章的内容。\n第三章的内容。\n第四编的内容。第五节的内容。"
    # 调用函数
    new_text = add_newlines_after_chapters(text)
    print(new_text)
    

    在这个代码中,(?<!\n)是一个负向后瞻断言,它确保“第”之前不是换行符。如果“第”后面紧跟着的是空格,并且“第”之前没有换行符,那么在“第”后面加上换行符。

    请注意,这个代码假设文本中的换行符是\n,而不是\r\n。如果你的文本中使用的是Windows风格的换行符,你可能需要调整代码以适应不同的换行符。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月24日

悬赏问题

  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计
  • ¥20 用keil,写代码解决两个问题,用库函数
  • ¥50 ID中开关量采样信号通道、以及程序流程的设计
  • ¥15 U-Mamba/nnunetv2固定随机数种子
  • ¥15 vba使用jmail发送邮件正文里面怎么加图片
  • ¥15 vb6.0如何向数据库中添加自动生成的字段数据。