regex - 反转括号内的两个字符串
问题描述
我有一coordinates
列引用了具有 3 个维度的 ID [z][x][y]
。我要做的是用 反转[x]
维度[y]
,使其成为具有(仍然)3 个维度但顺序不同的表:[z][y][x]
这是该列的一个片段:
+------------------------+
| COORDINATES |
+------------------------+
| ID_01.02.a[][01][20] |
| ID_02.00[010][02][017] |
| ID_03.01[][][010] |
| ID_04.01.w[010][][] |
+------------------------+
这是重现此代码段的代码:
data have;
input coordinates :$30.;
datalines;
ID_01.02.a[][01][20]
ID_02.00[010][02][017]
ID_03.01[][][010]
ID_04.01.w[010][][]
;
决赛桌预计为:
+------------------------+
| COORDINATES |
+------------------------+
| ID_01.02.a[][20][01] |
| ID_02.00[010][017][02] |
| ID_03.01[][010][] |
| ID_04.01.w[010][][] |
+------------------------+
当我尝试使用扫描功能时,它不起作用,因为我找不到健壮的索引,例如x_after = trim(scan(coordinates,2,'[]'))
. 实际上,如果 z 轴不为空,它将输出 z 轴,如果 z 轴为空,它将输出 x 轴。
解决方案
PRXCHANGE
您可以通过修改包含简单和复杂模式的值来访问正则表达式功能。
例子:
data have;
input COORDINATES $char50.;
datalines;
ID_01.02.a[][01][20]
ID_02.00[010][02][017]
ID_03.01[][][010]
ID_04.01.w[010][][]
;
data want;
set have;
put coordinates;
coordinates = prxchange
( 's/(.*?\[.*?\])(\[.*?\])(\[.*\])/$1$3$2/'
, 1
, coordinates
);
put coordinates /;
run;
日志
ID_01.02.a[][01][20]
ID_01.02.a[][20][01]
ID_02.00[010][02][017]
ID_02.00[010][017][02]
ID_03.01[][][010]
ID_03.01[][010][]
ID_04.01.w[010][][]
ID_04.01.w[010][][]
推荐阅读
- python - 如何在 Python 中多次返回一个对象?
- pip - 当我使用“pip install -e”在 Windows 中安装“OpenAI 基线”时出现错误
- react-native - 如何水平滚动具有两列的图像,上排包含偶数图像,下排包含奇数图像
- angular - 如何为共享相同路径的选项卡组件应用 Angular routerLinkActive
- git - 像第一次添加文件一样添加文件?
- javascript - Angularjs - 尝试在需要字符串的内容中信任非字符串值:上下文:html - 在插入数据时
- sql - 如何使用函数 - MAX(smthng) 和 COUNT(MAX(smthng) 之后
- amazon-web-services - AWS EB 单个 docker 出现 404 错误 - 已暴露 8000 端口
- html - 使用css在反面制作元素
- python - 在远程机器上运行 .bat 文件