首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >标点符号前提取词的正则表达式

标点符号前提取词的正则表达式
EN

Stack Overflow用户
提问于 2019-09-04 09:02:18
回答 2查看 51关注 0票数 0

我试图提取出现在标点符号之前的短语,但它的形式是短语中的大写单词。

抽象代数.现代数学领域,认为代数结构是具有运算的集合,并将通常与实数系统相关联的代数概念推广到其他更一般的系统,如群、环、域、模和向量空间。 代数:数学的一个分支,它使用符号或字母来表示变量、值或数字,然后可以用来表示运算和关系以及求解方程。 代数表达式.一种数字和字母的组合,相当于语言中的短语,例如x2 +3x-4。 分析(笛卡尔)几何学:利用坐标系统和代数分析原理研究几何,从而定义几何形状,并从表示中提取数值信息。 归纳推理或逻辑:推理的一种类型,它涉及从一组具体的事实转移到一个一般的结论,表示对结论的某种程度的支持,而没有实际确保其真实性。

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

代码语言:javascript
复制
(([? ])([A-Z][a-z\s]+)?([A-Z][a-z\s]+?[.:]))

我对此有两个问题。

  1. 我认为这不是最好的写作方式。
  2. 它没有捕捉到一个短语中有两个以上单词的词。
EN

回答 2

Stack Overflow用户

发布于 2019-09-04 09:06:56

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

解释:

^ -行的开头

[A-Z] -单大写字符

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

演示

票数 2
EN

Stack Overflow用户

发布于 2019-09-04 09:59:32

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

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

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

代码语言:javascript
复制
\b([A-Z][a-z]+(?:\s+[A-Z][a-z]+)*)[.:]

解释

  • \b字界
  • ( Capture group 1
    • [A-Z][a-z]+
    • (?:\s+[A-Z][a-z]+)*重复0+倍匹配and和1+倍A-Z

  • )紧群
  • [.:]匹配.:

Regex演示

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

代码语言:javascript
复制
\b((?:\([A-Z][a-z]+\)|[A-Z][a-z]+)(?:\s+(?:\([A-Z][a-z]+\)|[A-Z][a-z]+))*)[.:]

Regex演示

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57785009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档