楼主: dreistein94
1344 0

[字符问题求助] 有关state 正则表达式 regex 消歧义 [推广有奖]

  • 0关注
  • 0粉丝

本科生

46%

还不是VIP/贵宾

-

威望
0
论坛币
9 个
通用积分
60.4204
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
215 点
帖子
19
精华
0
在线时间
167 小时
注册时间
2016-10-27
最后登录
2024-7-8

楼主
dreistein94 学生认证  发表于 2019-9-18 00:01:28 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

电脑相关信息: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中的“非”命令:如何在(.*)中剔除某些特定的字符或字符串组合?

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

二维码

扫码加我 拉你入群

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

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

关键词:State 正则表达式 REG ATE 表达式

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-1-1 12:45