\1\1\1\1\1
JSL REGEX 函数正则表达式有一个默认为“\0”的格式参数。 \0 是所有匹配文本的反向引用。
sentence = "the quick brown fox jumped over the lazy dog";
regex( sentence, "\w{6,6}", "\0"); // look for exactly 6 word characters
“跳”
其他反向引用由括号创建。
sentence = "the quick brown fox jumped over the lazy dog";
regex( sentence, "(\b\w{4,4}\b).*(\b\w{4,4}\b)",
"this part: \0\!nhas this: \1\!nand this: \2\!nfour letter words");
“这一部分:关于懒惰
有这个:结束
还有这个:懒惰
四字词”
第一个六个字母的示例之所以有效,是因为没有单词超过六个字母。 四字母单词的例子更复杂;它使用 \b 来匹配单词边界。 如果没有边界测试,快速看起来是一个四个字母的单词。 format 参数使用反向引用 \0、\1 和 \2 生成所有四行文本。 \1 是第一个括号组,\2 是第二个组。 \0 仍然是整个文本匹配。 ( \!n 是换行符。 它全部一起运行,因为任何空格都会成为输出的一部分。 )
正则表达式默认区分大小写。 此示例无法匹配并返回缺失值
sentence = "the quick brown fox jumped over the lazy dog";
regex( sentence, "DOG");
。
有一个选项可以做到这一点。
sentence = "the quick brown fox jumped over the lazy dog";
regex( sentence, "DOG", "\0", IGNORECASE);
“狗”
并且格式字符串中有更改大小写的规范。
sentence = "tHe QUick BROWN fox jUMPED over the lAZy DoG";
regex( sentence, "\b(\w)(\w*)\b", "\U\1\E\L\2\E", IGNORECASE, GLOBALREPLACE);
“敏捷的棕色狐狸跳过了懒狗”
正则表达式已将破烂的大小写输入到初始大写字母中。 格式字符串包含 \U 开始大写,\L 开始小写,\E 结束大小写更改。
正则表达式替换字符串的语法(类似于 Perl)
- \L - 开始小写输出直到 \E
- \U - 开始大写输出直到 \E
- \E - 大小写结尾和引用修改
- \l - (小写字母 L) - 小写下一个字符
- \u - 大写下一个字符
- \0 ... \999 - 替换模式中匹配的表达式之一
- \e - 如果后面有更多数字,则为数字结尾:\7\e123 表示表达式 7 后跟 123(JMP 扩展)
- \\ - 单个反斜杠
发现一个错误:这目前不起作用,但在 12.2 维护中会起作用(由于与 IGNORECASE 和 GLOBALREPLACE 的交互不良以及字符串末尾的零长度匹配而导致循环)
sentence = "tHe QUick BROWN fox jUMPED over the lAZy DoG";
regex( sentence, "\b(\w*)\b", "\L\u\1", IGNORECASE, GLOBALREPLACE);
由于搜索字符串中没有特定于大小写的字符,因此这将起作用:
sentence = "tHe QUick BROWN fox jUMPED over the lAZy DoG";
regex( sentence, "\b(\w*)\b", "\L\u\1", GLOBALREPLACE);
“敏捷的棕色狐狸跳过了懒狗”
使用 \w+ 而不是 \w* 也可以通过坚持单词至少具有一个字符来避免这一问题。
田纳西华尔兹在前面。
2017 年 2 月 4 日更新:修复了新社区的格式(和图片)。
@gianpaolo :
你的观察是完全正确的。 这是我的拼写错误和疏忽。 您发布的脚本是正确的
非常感谢你的帮助,
只是我认为如果我在 FOR Cicle 中使用“Colnames”而不是“ColsList”,脚本就可以工作
清除全局变量();
清除日志();
dt =当前数据表();
列名 = dt <<获取列名称( “细绳” );
为了(我= 1 , 我 <= N 项( 列名 ), i++,
如果(!不见了(正则表达式(查尔( ColNames[i] ), “^[0-9]” ) ),
列=柱子(dt,i); // 其中 dt 是您的数据表
列名 = 列 <<获取姓名;
新名称 =康卡特( “*” , 列名 );
上校 <<设置名称( 新名字 );
)
);
我是 jmp 脚本编写的初学者...如果我错了请原谅我
您可能需要将正则表达式更改为
<SPAN class="token string">"^[0-9]"</SPAN>
强制它查找字符串开头的字符。 否则,像 Column7 这样的名称会匹配。
@gianpaolo ,
这是解决问题的一种方法。我的建议是在“讨论”中发布此类问题 - 并提供博客链接。 社区将能够更快地解决您的问题:
Clear Globals(); Clear Log();
dt = Current Data Table();
ColNames = dt << Get Column Names("String");
for( i = 1 , i <= N Items(ColsList) , i++,
If(!IsMissing(Regex(Char(ColsList[i]),"[0-9]")),
Col = Column(dt,i); // where dt is your data table
ColName = Col << Get Name;
NewName = Concat("*",ColName);
Col << Set Name(NewName);
);
);
提供的是我为运行该示例而制作的数据表(dt)的屏幕截图
你好,克雷格·黑尔斯,
我发现“正则表达式”功能对于应用我的作品非常有趣。
我需要详细修改我的脚本的 Comuns 名称,我想在我的列名以数字开头时插入一个字符。
例如如果是:“00001 DATA no 1”
然后将是:“*00001 DATA no 1”(在本例中我添加了“*”)
如果是:“数据号 1”
那么将是:“DATA no 1”(在这种情况下没有变化)
可以使用正则表达式吗?你能帮助我吗?
多谢
你好詹保罗