楼主: dxystata
4950 13

[问答] 如何用正则表达式实现 [推广有奖]

版主

大师

34%

还不是VIP/贵宾

-

TA的文库  其他...

Software

中英文Ebook

R学习

威望
2
论坛币
182304 个
通用积分
15205.6031
学术水平
208 点
热心指数
271 点
信用等级
174 点
经验
291157 点
帖子
5375
精华
1
在线时间
13478 小时
注册时间
2006-6-21
最后登录
2024-4-26

初级学术勋章 初级热心勋章 中级热心勋章 初级信用勋章

50论坛币

  1. data aaa;
  2. input x$10. y$12. z$11.;
  3. cards;
  4. 10.0±2.4b 12.2±2.3ab 14.2±2.0a
  5. ;
  6. run;


  7. data bbb;
  8. input x$10. y$12. z$11.;
  9. cards;
  10. 10.0(2.4)b 12.2(2.3)ab 14.2(2.0)a
  11. ;
  12. run;
复制代码

如何用正则表达式实现将10.0±2.4这种格式或10.0(2.4)这种格式后面的字母变成:
10.0±2.4b 为10.0±2.4{\super b}    12.2±2.3ab为12.2±2.3{\super ab}


谢谢!

关键词:正则表达式 表达式 如何用 super cards
正则表达式不能完全显示出来,看下面引用回复

微信截图_20220501112616.png (17.83 KB)

程序文本显示错误,以图片为准

程序文本显示错误,以图片为准

已有 1 人评分经验 学术水平 热心指数 信用等级 收起 理由
dxystata + 100 + 1 + 1 + 1 热心帮助其他会员,节日快乐!

总评分: 经验 + 100  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

藤椅
Song123666 在职认证  学生认证  发表于 2022-5-1 11:24:40 |只看作者 |坛友微信交流群
同问,谢谢楼主

使用道具

dddddddddd
data bbb;
length a $20.;
a="12.2(2.3)ab";
re=prxparse("/(\d+.?\d+\(\d+.?\d+\))([a-z]+\s)/");
match=prxmatch(re,a);
str=prxposn(re,2,a);
call prxposn(re,2,position, length);
substr(a,position)=cats("{",catx(" ","\super",str),"}");
run;
已有 1 人评分经验 热心指数 收起 理由
dxystata + 100 + 1 热心帮助其他会员

总评分: 经验 + 100  热心指数 + 1   查看全部评分

使用道具

报纸
whymath 发表于 2022-5-1 11:44:57 |只看作者 |坛友微信交流群
  1. data aaa;
  2. input x $10. y$12. z$11.;
  3. tran_x=prxchange('s/(\d±\d+(\.\d+)?)(\w)/$1{\super $3}/i',1,x);
  4. cards;
  5. 10.0±2.4b 12.2±2.3ab 14.2±2.0a
  6. ;
  7. run;

  8. data bbb;
  9. input x $10. y$12. z$11.;
  10. tran_x=prxchange('s/(\d)\((\d+(\.\d+)?)\)(\w)/$1±$2{\super $4}/i',1,x);
  11. cards;
  12. 10.0(2.4)b 12.2(2.3)ab 14.2(2.0)a
  13. ;
  14. run;
复制代码
已有 1 人评分经验 学术水平 热心指数 信用等级 收起 理由
dxystata + 100 + 1 + 1 + 1 热心帮助其他会员,节日快乐!

总评分: 经验 + 100  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

地板
dxystata 发表于 2022-5-2 09:41:46 |只看作者 |坛友微信交流群
whymath 发表于 2022-5-1 11:44
能否截个图,有乱码,谢谢!

使用道具

7
whymath 发表于 2022-5-2 18:15:05 |只看作者 |坛友微信交流群
dxystata 发表于 2022-5-2 09:41
能否截个图,有乱码,谢谢!
data aaa;
  input x $10. y $12. z $11.;
  tran_x=prxchange('s/(\d±\d+(\.\d+)?)(\w)/$1{\super $3}/i',1,x);
  cards;
10.0±2.4b 12.2±2.3ab 14.2±2.0a
;
run;

data bbb;
  input x $10. y $12. z $11.;
  tran_x=prxchange('s/(\d)\((\d+(\.\d+)?)\)(\w)/$1±$2{\super $4}/i',1,x);
  cards;
10.0(2.4)b 12.2(2.3)ab 14.2(2.0)a
;
run;

使用道具

8
whymath 发表于 2022-5-2 18:21:16 |只看作者 |坛友微信交流群
网站的代码块支持做的不好,从后台可以看出原本的内容并未被改正,应从样式上找原因: 捕获.PNG
版主你能反映给开发人员吗?
已有 1 人评分经验 收起 理由
kychan + 60 精彩帖子

总评分: 经验 + 60   查看全部评分

SASUSER

使用道具

9
dxystata 发表于 2022-5-3 00:13:44 |只看作者 |坛友微信交流群
whymath 发表于 2022-5-2 18:21
网站的代码块支持做的不好,从后台可以看出原本的内容并未被改正,应从样式上找原因:
版主你能反映给开发 ...
能否解释一下所用正则表达式的含义,谢谢!

使用道具

10
whymath 发表于 2022-5-8 21:56:48 |只看作者 |坛友微信交流群
regex.png
prxchange 函数所引用第一个参数为正则表达式,从左至右释义如下:
s/: 表示对之后的文本模式进行替换;
\d±: 一个数字后面跟着±;
\d+: 1个或多个数字;
\.\d+: 小数点后跟着1个或多个数字;
(\.\d+)?: 捕获文本模式“小数点后跟着1个或多个数字”发生0次或1次;
(\d±\d+(\.\d+)?): 捕获文本模式“一个数字,跟着±,跟着1个或多个数字,跟着小数点和1个或多个数字(此模式允许不存在)”;
\w: 1个任意字母、数字、下划线;
(\w): 捕获文本模式“1个任意字母、数字、下划线”;

$1: 第1个捕获组,即从左至右第1个捕获组的内容(\d±\d+(\.\d+)?);
$3: 第3个捕获组,即从左至右第3个捕获组的内容(\w);

i: 修饰符,表示忽略正则表达式中非元字符部分的大小写;

已有 1 人评分经验 学术水平 热心指数 信用等级 收起 理由
dxystata + 100 + 2 + 2 + 2 热心帮助其他会员

总评分: 经验 + 100  学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

SASUSER

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

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

GMT+8, 2024-4-27 11:14