首页 > 解决方案 > 正则表达式提取单词之前/之后的数字

问题描述

我有10000描述,我想使用正则表达式来提取与短语“逮捕”相关的数字。

例如:

"police arrests 4 people"
"7 people were arrested". 

数字范围从1-99.

我尝试了以下代码:

gen arrest= regexm(description, "(^[1-9][0-9]$)[ ]*(arrests|arrested)")

我不能简单地提取数字,因为描述中还提到了与逮捕无关的数字。

标签: regexstata

解决方案


您可以使用此正则表达式:

(?:([1-9]?[0-9])[a-zA-Z ]{0,20}(?:arrests|arrested))|(?:(?:arrests|arrested)[a-zA-Z ]{0,20}([1-9]?[0-9]))

它通过交替将搜索分为 2,无论数字是在“逮捕|逮捕”之前还是之后。

它创建一个非捕获Group,它匹配一个number从 1-9(这是可选的)和一个从 0-9 的数字。这之后是匹配0 - 20 of any letter和空格(其他单词),然后再匹配 'arrests OR arrested.它然后将其与相反的情况(数字最后出现的位置)进行 OR 运算。

如果数字within 20 chars来自“ arrests|arrested”,这将匹配。


推荐阅读