Sata中的字符型函数与正则表达式

查找并提取查找结果

gen age_low = real(ustrregexs(0)) if ustrregexm(年龄,".*(?=-)")
  • 其中,年龄为字符型变量,包含了类似于“18-25岁“这样的字符。
  • ustrregexm命令可以进行正则匹配,当符合匹配时返回1,否则为0,因此该命令不能范围查找结果,需要结合ustrregexs(0)命令使用。
  • ustrregexs(0)意为返回上一个ustrregexm命令中匹配到的第一个结果。
  • real()为将字符型转为数值型的命令。
  • 当处理中文字符时,必须使用ustrregexm,而不是regexm

前向与后向查找

  • (?=pattern)正向肯定预查(look ahead positive assert),
    在任何匹配pattern的字符串开始处匹配查找字符串。
    例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”

  • (?<=pattern)反向(look behind)肯定预查
    例如,“(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”

特殊字符处理

charlist varname可以返回某个变量中的所有字符(数字、标点符号、特殊字符和英文字母);随后return list可以返回这些字符对应的ASCII编码。
该命令可以快速检索字符型变量中的特殊字符。

正则表达式版本

Regular expression syntax is based on Henry Spencer’s NFA algorithm, and this is nearly identical to the POSIX.2 standard.(来自于stata17的string function的说明文档)

常见文本匹配

  • 汉字字符: [\u4E00-\u9FFF]
  • 性别提取:
    local regular "女[性士生]优先|男[性士生]优先|男女不[限拘]|男女[都皆均]可|男性士生|女性士生|男女|(?<![\u4E00-\u9FFF])男女|性别(不限|男|女)|只[招要][男女]|(要求|招聘)男女|限[男女]"
  • \w:匹配标点符号
  • \W:匹配非标点符号
  • 提取含有某个关键词的句子:r"[^标点符号]*?关键词[^标点符号]*"
    image
posted @ 2022-12-01 16:55  梁书源  阅读(992)  评论(0)    收藏  举报