楼主: Lee_iris
1782 1

[学习心得] stata 正则表达式 提取汉字 [推广有奖]

已卖:1252份资源

教授

46%

还不是VIP/贵宾

-

威望
0
论坛币
1167 个
通用积分
1195.9565
学术水平
36 点
热心指数
43 点
信用等级
35 点
经验
14294 点
帖子
893
精华
0
在线时间
1516 小时
注册时间
2019-3-5
最后登录
2025-12-12

楼主
Lee_iris 在职认证  学生认证  发表于 2024-1-19 14:15:12 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
例1 :从爬取的源代码数据中提取信息:从网站爬取的数据含有一些源代码如"<td class="ccl"><div>董事</div>"中提取"董事",首先要对目标进行描述(在这个例子里以下方式均可,但其他例子中不一定,需要根据具体情况自己判断总结):
(1)目标字符串在<div>和</div>之间。
(2)目标字符串不在<>之间。
(3)目标字符串为汉字。

代码分别如下:
clear
*输入字符串
input str50 v
`"<td class="ccl"><div>董事</div>"'
end
*使用描述(1)提取"董事",生成新变量
gen 董事=ustrregexs(1) if ustrregexm(v,"<div>(.*?)</div>") *使用描述(1)提取"董事",替换原有变量
replace v =ustrregexs(1) if ustrregexm(v,"<div>(.*?)</div>")
list


ustrregexs(n) 表示按照ustrregexm(正则表达式)找到的第1个字符串,如果同一字符串有多个变量需要提取,参考这个帖子的例子: 从“广东省深圳市” 提取出“广东省”和“深圳市”
https://bbs.pinggu.org/forum.php?mod=redirect&goto=findpost&ptid=6272311&pid=77773881

如果想把提取出的多个字符串仍作为一个变量,这种方式不能一步到位,还需要对字符串进行相加。正向提取不方便,也可以反向相减,把不需要的信息删去即可,正如后两种描述方式。

clear
*输入字符串
input str50 v
`"<td class="ccl"><div>董事</div>"'
end
*使用描述(2)提取"董事",生成新变量
gen 董事=ustrregexra(v,"<(.*?)>","")
*使用描述(2)提取"董事",替换原有变量
replace v = ustrregexra(v,"<(.*?)>","")
list

这种方式是将尖括号以及其中的内容删去。但如果字符串中有的部分只有半个尖括号,比如“<td class="ccl"><div>董事</d”,那么这种描述方式也不合适。后面“</d”没法被正确删除。所以要非常小心地观察数据,避免误伤和漏删。

clear
*输入字符串
input str50 v
`"<td class="ccl"><div>董事</div>"'
end
*使用描述(3)提取董事,生成新变量
gen 董事=ustrregexra(v,"([^\u4e00-\u9fa5])","")
*使用描述(3)提取董事,替换原有变量
replace v =ustrregexra(v,"([^\u4e00-\u9fa5])","")
list

[\u4e00-\u9fa5]表示汉字的Unicode编码,[^\u4e00-\u9fa5]表示非汉字的内容,即将非汉字的内容删除。但如果字符串中有一些不需要保留的汉字,或者有需要保留的非汉字,也不能这样草率地删除。





二维码

扫码加我 拉你入群

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

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

关键词:Stata 正则表达式 tata 表达式 pinggu

沙发
Lee_iris 在职认证  学生认证  发表于 2024-1-19 14:28:21
传了很多次,编辑栏的代码功能没成功转格式,还是用普通文字表述了。需要的话自己复制。
例子参考《stata正则表达式及其在财务数据中的应用》,代码是自己尝试写的,还在学习中。此外还有连玉君老师团队主页可以参考学习。之前尝试在主题帖附链接,没有通过审核。大家自行检索。

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

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-15 14:29