全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
1345 0
2019-09-18

电脑相关信息:stata版本:stata16MP
PC系统:win10

问题具体描述:
对于ustrregex函数中,用以表示任意字符的.和用以说明前一表达式匹配个数为任意的*合用为(.*)时的一些可能的问题。
数据样式:

 变量名: var1
观测值1: {A00002B;?B11111B;?C44444A},B33333E,{B9999R;?A22222D},B44444F,{B3333D;?D4444H}

数据说明:以,作为分隔符,首字母为某项目的大类类别,{}代表某项目可能从属于多个类别,其中不同类别以;?分隔,可以看出该观测值都具有大类B。

处理目的:希望将所有包含比大类B小的大类项目去掉(即将所有{}中包含首字母为A的项目去掉)

问题分析:

由于A只可能出现在{A或者;?A这两个位置,则以此作为识别标志

命令尝试

 gen var2 = ustrregexra(var1,"(\{A(.*)\}|\{\(.*)(;\?A)(.*)})","")

命令分析:

要删除的一定在花括号{}中,所以通过转义符\确定\{\},中间除了紧跟在左花括号{A和原有分隔符;?A外,存在数字、字母、标点,因此统一用(.*)来描述

发现问题:

可能出现对{A...},B...,{...(该括号中没有A类)}或者{...(该括号中没有A类)},B..,{..;?A..}或者{A...},B...,{..;?A...}这三种情况的误判。即并不能保证只在一对花括号中进行匹配

勉强可行的修改方式:

由于确定所有类别号仅有大写英文和数字组成,可将花括号中的分隔符;?替换为小写字母,然后将表示任意字符的(.*)更改为任意大小写字母和数字的([a-zA-Z0-9]*)

但这种修改法只能用于这种特定的情况(能用小写字母作为花括号中的分隔符)

希望大家解决:

regex中的“非”命令:如何在(.*)中剔除某些特定的字符或字符串组合?

即,如何在\{(.*)\}中保证\}是在\{之后的第一个\}?

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群