提取字符串相邻的数字你好,有人能帮我提取字符串相邻的数字吗?
我有下面显示的第 1 列,并希望提取与“HFA”(第 2 列)相邻的数字。
我尝试了以下 JSL,但无法获得我期望的 column2
Num( Regex( :第 1 列, "(\d\d\d)HFA | HFA(\d\d\d)", "\1" ) )
| 列1 | 第2栏 |
| 400HFA isa300 | 400 |
| isa300 HFA400 | 400 |
感谢您考虑这个问题。
自动化和脚本回复:提取与字符串相邻的数字你好@jthi
非常感谢您提供该问题的替代解决方案,以及正则表达式上的链接。
回复:提取与字符串相邻的数字你好@Craige_Hales ,
非常感谢您丰富了讨论。
事实上,我首先从您的旧文章中了解了 JMP 的正则表达式!
https://community.jmp.com/t5/Uncharted/Regex/ba-p/21008
回复:提取与字符串相邻的数字练习和测试正则表达式的好地方是https://regex101.com/ .

那些删除了 JMP 转义字符的注释非常有用,当我编写更复杂的正则表达式模式时,我必须开始添加它们(转义字符的正则表达式问题)
回复:提取与字符串相邻的数字谢谢@AprioriFish3134用于指出原始问题(没有 \2),以及@ngambles一个好的解决方案。
如果您需要更多级别的嵌套 parens,或者示例中的顺序 parens,只需从左到右计算开放的 parens 以发现后面的引用编号。 未使用的替代项的反向引用是一个空字符串。
Regex( "abac", "(((a)|(b)|(c))(c))+", "1=\1 2=\2 3=\3 4=\4 5=\5 6=\6" )
“1=ac 2=a 3=a 4= 5= 6=c”
有一件事可能并不明显:反向引用也可以用在模式中。 这对于确保一致使用前导和尾随引号或撇号很有用:
Write( Regex(
"before 'a \!"b\!" c' after", // before 'a "b" c' after
"(\!"|')(.*?)\1", // ("|')(.*?)\1
"\2"
) )
一个“乙”丙
(\!" 转义符在字符串内放置一个引号;注释显示字符串的文本。)在这个例子中,\1 组可以匹配 " 或 ',\2 匹配所有文本直到另一个出现的\1.
如果你这样写正则表达式,请使用一些注释! 下一个维护者会很感激。
回复:提取与字符串相邻的数字如果出于某种原因需要解决该问题@ngambles提到,一种相当简单的方法是使用 Regex Match 而不是 Regex
Names Default To Here(1);
a = "400HFA isa300";
b = "isa300 HFA400";
c = "400HFA300";
d = "400HF300";
rgx_pattern = "(\d*)(?:HFA)(\d*)";
show(Regex Match(a, rgx_pattern));
show(Regex Match(b, rgx_pattern));
show(Regex Match(c, rgx_pattern));
show(Regex Match(d, rgx_pattern));
正则表达式匹配将需要一些额外的检查,因为它会返回捕获的组列表。
回复:提取与字符串相邻的数字嗨 Ngambels,
非常感谢您的帮助。 它解决了这个问题。
我试过了
"(\d*)HFA(\d*)"
但显然我错过了(我不知道我可以而且必须同时使用 \1 和 \2)
"\1\2"
我从你那里和通过这次讨论学到了新东西。
再一次,非常感谢你!
回复:提取与字符串相邻的数字给定小示例集,以下公式有效:
Num( Regex( :column1, "(\d*)HFA(\d*)", "\1\2" ) )
如果你有像“400HFA300”这样的实例,这个解决方案就会遇到问题。它将返回 400300。