全部版块 我的主页
论坛 提问 悬赏 求职 新闻 读书 功能一区 经管百科 爱问频道
1058 10
2022-01-12
悬赏 1000 个论坛币 未解决
文本如下:
复制代码
求一个通用的正则表达式,把文本中的'6489163'匹配出来
条件:
1、不能规定数字串长度
2、不能规定数字串在xx字符之前/之后,但可以指明数字串前后含有/不含xx字符
3、不能规定数字串中是否含'.'

我个人搞的表达式是:
复制代码
这样会把后面的4、17、2022、3844584匹配出来
修正一下前后不含'[]'、'-'和英文的话:
复制代码
这样会把4、1、844584匹配出来
其实我问题的核心是,如何用正则表达式描述  前后含有XX字符的连续数字串,因为2022中的02前后也是数字,不知道怎么处理比较好,也不能限定数字串的长度
请各位大神帮帮忙

二维码

扫码加我 拉你入群

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

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

全部回复
2022-1-13 14:36:43
看不懂你的描述 似乎是要求提取在两段中文之间的带小数点的数字?不能出现英文?
二维码

扫码加我 拉你入群

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

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

2022-1-13 15:07:46
pengxhan 发表于 2022-1-13 14:36
看不懂你的描述 似乎是要求提取在两段中文之间的带小数点的数字?不能出现英文?
我要提取的数字没有特定的格式,所以我需要剔除文本中其它的数字串,剩下就是我要的
文本中会出现:夹在中文之间的数字、跟英文混搭的数字,我要把这两种给剔除掉
我在写这些否定逻辑的时候,不知道怎么表达如:前后不是中文的连续数字串,譬如‘中文1234中文’,前后不是中文的数字串也可以是‘2’、‘3’和‘23’
二维码

扫码加我 拉你入群

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

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

2022-1-13 15:25:24
64891.63不算夹在中文之间? 是因为63后面是空格加中文  2022也没有夹在中文之间 他前后是[]  217也不是夹在中文之间 他前面中文 后面是-
所以你要提取的64891.63规则是必须中文开头,不能其他字符开头,而且紧接着连续数字,数字后面只能空格 不能跟空格以外的字符?
二维码

扫码加我 拉你入群

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

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

2022-1-13 15:40:14
如果理解对了 那应该这样
clear
input strL v
"中文64891.63  中文842中文 ABCD[2022]中文217-EFG3844584 中文"
end
gen x=ustrregexs(0) if ustrregexm(v,"(?<=[\u4e00-\u9fa5])\d+\.?\d+(?= )")
list
二维码

扫码加我 拉你入群

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

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

2022-1-13 15:41:08
clear
input strL v
"中文64891.63  中文842中文 ABCD[2022]中文217-EFG3844584 中文"
end
gen x=ustrregexs(0) if ustrregexm(v,"(?<=[\u4e00-\u9fa5])\d+\.?\d+(?= )")
list
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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