楼主: honghosum
882 10

[统计软件] 正则表达式匹配数字串求助 [推广有奖]

  • 0关注
  • 0粉丝

大专生

56%

还不是VIP/贵宾

-

威望
0
论坛币
2223 个
通用积分
0.7350
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1000 点
帖子
15
精华
0
在线时间
89 小时
注册时间
2021-9-1
最后登录
2024-6-25

1000论坛币
文本如下:
  1. ‘中文64891.63  中文842中文 ABCD[2022]中文217-EFG3844584 中文’
复制代码
求一个通用的正则表达式,把文本中的'6489163'匹配出来
条件:
1、不能规定数字串长度
2、不能规定数字串在xx字符之前/之后,但可以指明数字串前后含有/不含xx字符
3、不能规定数字串中是否含'.'

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

关键词:正则表达式 表达式
沙发
pengxhan 发表于 2022-1-13 14:36:43 |只看作者 |坛友微信交流群
看不懂你的描述 似乎是要求提取在两段中文之间的带小数点的数字?不能出现英文?

使用道具

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

使用道具

板凳
pengxhan 发表于 2022-1-13 15:25:24 |只看作者 |坛友微信交流群
64891.63不算夹在中文之间? 是因为63后面是空格加中文  2022也没有夹在中文之间 他前后是[]  217也不是夹在中文之间 他前面中文 后面是-
所以你要提取的64891.63规则是必须中文开头,不能其他字符开头,而且紧接着连续数字,数字后面只能空格 不能跟空格以外的字符?

使用道具

报纸
pengxhan 发表于 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

使用道具

地板
pengxhan 发表于 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

使用道具

7
honghosum 发表于 2022-1-13 15:42:34 |只看作者 |坛友微信交流群
pengxhan 发表于 2022-1-13 15:25
64891.63不算夹在中文之间? 是因为63后面是空格加中文  2022也没有夹在中文之间 他前后是[]  217也不是夹 ...
我的文本格式其实是一个列表
['xx64891.63xx',
'中文842中文',
'ABCD[2022]217-EFG3844584']
像这样的东西,我是写一个for循环每一项去匹配,所以不存在空格的问题
问题是我要匹配的数字前后没有特定的规则,他也可能只是64891.63,也可能是6489163
唯一知道的是,这一项它不会前后都是中文,也不会跟英文混搭,不会有[]-这些特殊符号

使用道具

8
pengxhan 发表于 2022-1-13 15:59:35 |只看作者 |坛友微信交流群
提取的数字夹在XX之间的连续整数或者小数 前后XX不能出现英文或者其他符号 也不能同时为中文 只前面出现中文可以 那只有后面出现呢 比如 ‘12345中文’
这个12345也算符合?

使用道具

9
honghosum 发表于 2022-1-13 16:05:19 |只看作者 |坛友微信交流群
pengxhan 发表于 2022-1-13 15:59
提取的数字夹在XX之间的连续整数或者小数 前后XX不能出现英文或者其他符号 也不能同时为中文 只前面出现中 ...
也可以有,无伤大雅,但肯定不是前后都是中文,前后xx也可以没有

使用道具

10
pengxhan 发表于 2022-1-13 16:09:19 |只看作者 |坛友微信交流群
['中文64891.63','842中文','3844584,' 38445 ']
38445前后是空格 也就是只有这4种都合格 其他都不合格

使用道具

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

本版微信群
加JingGuanBbs
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-11-5 23:36