正则表达式提取单词之前/之后的数字

ser*_*ina 5 regex stata

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

例如:

"police arrests 4 people"
"7 people were arrested". 
Run Code Online (Sandbox Code Playgroud)

数字范围从1-99.

我尝试过以下代码:

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

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

Pou*_*Bak 4

您可以使用这个正则表达式:

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

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

它创建一个非捕获Group,匹配number1-9 (可选)和 0-9 之间的数字。接下来是匹配0 - 20 of any letter和空格(其他单词),然后再匹配'arrests OR arrested.然后将其与相反的情况(数字排在最后)进行或运算。

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