我正在尝试提取出现在标点符号之前的短语,但该短语的形式应为大写单词。
抽象代数。考虑到的现代数学领域 待定义的代数结构及其上的运算,以及 扩展通常与实数相关的代数概念 系统到其他更通用的系统,例如组,环,字段, 模块和向量空间。
代数。数学的一个分支,使用符号或字母 代表变量,值或数字,然后可以用来 表达操作和关系并求解方程式。
代数表达式。等同于数字和字母的组合 语言中的短语,例如x2 + 3x-4。
解析(笛卡尔)几何: 坐标系以及代数和分析原理,因此 以数字方式定义几何形状并提取 该表示形式的数字信息。
归纳推理或逻辑:一种涉及移动的推理 从一组具体事实到一个总体结论,表明了一些 对结论的支持程度,但实际上并未确保结论的正确性 真相。
当前我正在使用以下正则表达式:
(([? ])([A-Z][a-z\s]+)?([A-Z][a-z\s]+?[.:]))
我对此有两个问题。
答案 0 :(得分:2)
答案 1 :(得分:1)
与当前数据不匹配超过1个单词的一个原因是该模式以[? ]
开头,它将与空格或问号匹配。
您也可以省略某些捕获组,而只使用一个。请注意,由于字符类不包含[a-z\s]+?[.:]
或?
.
使此匹配:
非贪婪
要获取大写字母后跟.
或:
,可以使用:
\b([A-Z][a-z]+(?:\s+[A-Z][a-z]+)*)[.:]
说明
\b
字边界(
捕获第1组
[A-Z][a-z]+
(?:\s+[A-Z][a-z]+)*
重复0次以上匹配A-Z和1次以上a-z )
关闭群组[.:]
匹配.
或:
如果您还想匹配用(
和)
包围的单词,则可以使用交替形式。
\b((?:\([A-Z][a-z]+\)|[A-Z][a-z]+)(?:\s+(?:\([A-Z][a-z]+\)|[A-Z][a-z]+))*)[.:]