【问题标题】:Regex for extracting words before punctuation's用于在标点符号之前提取单词的正则表达式
【发布时间】:2020-01-07 03:32:34
【问题描述】:

我正在尝试提取出现在标点符号之前但形式为短语中大写单词的短语。

抽象代数。现代数学领域 代数结构将被设置为在其上定义了操作,并且 扩展了通常与实数相关的代数概念 系统到其他更一般的系统,例如组,环,场, 模块和向量空间。

代数。数学的一个分支,它使用符号或字母来表示 表示变量、值或数字,然后可用于 表达操作和关系并求解方程。

代数表达式。数字和字母的组合等效 语言中的一个短语,例如x2 + 3x - 4。

解析(笛卡尔)几何:使用 坐标系和代数和分析的原理,因此 以数字方式定义几何形状并提取 来自该表示的数字信息。

归纳推理或逻辑:一种涉及移动的推理 从一组具体的事实到一个普遍的结论,表明一些 在没有实际确保其结论的情况下对结论的支持程度 真相。

目前我正在使用以下正则表达式:

(([? ])([A-Z][a-z\s]+)?([A-Z][a-z\s]+?[.:]))

我有两个问题。

  1. 我认为这不是最佳的编写方式。
  2. 它不会捕获短语中包含两个以上单词的单词

【问题讨论】:

    标签: python regex


    【解决方案1】:

    试试^[A-Z][^.,:';]+

    解释:

    ^ - 行首

    [A-Z] - 单个大写字符

    [^.,:';]+ - 一个或多个不同于.,:';的字符

    Demo

    【讨论】:

      【解决方案2】:

      当前数据匹配不超过 1 个单词的一个原因是该模式以 [? ] 开头,它将匹配空格或问号。

      您也可以省略一些捕获组并使用单个捕获组。请注意,您不必使用 ? 使此匹配 [a-z\s]+?[.:] 非贪婪,因为字符类不包含 .:

      要获取.: 后跟的大写单词,您可以使用:

      \b([A-Z][a-z]+(?:\s+[A-Z][a-z]+)*)[.:]
      

      说明

      • \b字边界
      • ( 捕获第一组
        • [A-Z][a-z]+
        • (?:\s+[A-Z][a-z]+)* 重复 0+ 次匹配 A-Z 和 1+ 次 a-z
      • )关闭群
      • [.:] 匹配 .:

      Regex demo

      如果您还想匹配被() 包围的单词,您可以使用交替。

      \b((?:\([A-Z][a-z]+\)|[A-Z][a-z]+)(?:\s+(?:\([A-Z][a-z]+\)|[A-Z][a-z]+))*)[.:]
      

      Regex demo

      【讨论】:

        猜你喜欢
        • 2015-06-15
        • 1970-01-01
        • 1970-01-01
        • 2015-08-13
        • 1970-01-01
        • 1970-01-01
        • 2021-12-24
        • 2020-12-17
        • 1970-01-01
        相关资源
        最近更新 更多