【问题标题】:Regex to get from one indent/tab to the next indent/tab in Python正则表达式从 Python 中的一个缩进/制表符到下一个缩进/制表符
【发布时间】:2021-06-19 23:02:44
【问题描述】:

以下代码(特别是正则表达式)可以从一个缩进/制表符转到分号 (;) 的下一个实例:

def find_matches(text):
    return capitalize(
        [
            m
            for m in re.findall(
                r"^[^0-9]\s+([^.;]+\s*)+[.;]+", normalize("NFKD", text), re.MULTILINE
            )
        ]
    )

有了这个,我可以用我的其余代码生成以下图像:

然而,我的问题在于我的正则表达式模式,因为我实际上应该从第一个缩进/制表符到下一个缩进/制表符实例,或者我想直到下一行没有缩进。这是原始的源字符串,它是从使用 docx 的 word 文档中获取的:

Here is a link to a MediaUpload file of my docx. 我选择了链接它,因为我无法在此处正确显示实际格式。此外,第二个文本框应该更长一些。

非常感谢任何帮助。

【问题讨论】:

  • 答案成功了吗?

标签: python regex text docx


【解决方案1】:

你可以使用

^[^\S\r\n].+(?:\n(?!\s).*)*

模式匹配:

  • ^ 字符串开始
  • [^\S\r\n] 匹配没有换行符的空白字符(缩进)
  • .+ 匹配除换行符以外的任何字符 1 次以上
  • (?:非捕获组整体重复
    • \n 匹配换行符
    • (?!\s).* 负前瞻,断言不是空白字符并匹配该行的其余部分
  • )*关闭非捕获组并可选择重复

Regex demo | Python demo


如果匹配必须以 1 个或多个数字开头,后跟 .,您可以先获取这些匹配,然后使用第一个模式处理这些匹配。

^\d+\..*(?:\n(?!\d+\.).*)*

Regex demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    相关资源
    最近更新 更多