文字列に隣接する数字を抽出こんにちは。文字列に隣接する数字を抽出するのを手伝ってくれる人はいますか?
以下に列 1 を示します。「HFA」(列 2) に隣接する数字を抽出したいと考えています。
次のJSLを試しましたが、期待した列2を取得できませんでした
Num( 正規表現( :列 1、 "(\d\d\d)HFA | HFA(\d\d\d)", "\1" ) )
| 列1 | 列2 |
| 400HFA isa300 | 400 |
| isa300 HFA400 | 400 |
ご質問を検討いただきありがとうございます。
自動化とスクリプトRe:文字列に隣接する番号を抽出します小さな例のセットを考えると、次の式が機能します。
Num( Regex( :column1, "(\d*)HFA(\d*)", "\1\2" ) )
「400HFA300」のようなインスタンスがある場合、このソリューションで問題が発生します。400300を返します。
Re:文字列に隣接する番号を抽出しますこんにちはNgambels、
ご助力ありがとうございます。 問題は解決しました。
やってみた
"(\d*)HFA(\d*)"
しかし、どうやら私は逃したようです(私は\1と\2の両方を使用できることを知りませんでした)
"\1\2"
私はあなたから、そしてこの議論を通して新しいことを学びました。
改めて、ありがとうございました!
Re:文字列に隣接する番号を抽出します何らかの理由で問題に取り組む必要がある場合@ngambles前述のように、かなり簡単な方法の1つは、正規表現の代わりに正規表現一致を使用することです。
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));
ただし、Regex Matchは、キャプチャされたグループのリストを返すため、追加のチェックが必要になります。
Re:文字列に隣接する番号を抽出しますありがとう@ AprioriFish3134元の問題(\ 2なし)を指摘してくれて、 @ngambles良い解決策のために。
さらに多くのレベルのネストされたパレン、または例のシーケンシャルパレンが必要な場合は、開いているパレンを左から右に数えて、後方参照番号を見つけてください。 未使用の代替のバックリファレンスは空の文字列です。
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"
明らかではないかもしれないことの1つは、バックリファレンスをパターンで使用することもできるということです。 これは、先頭と末尾の引用符またはアポストロフィが一貫して使用されていることを確認するのに役立ちます。
Write( Regex(
"before 'a \!"b\!" c' after", // before 'a "b" c' after
"(\!"|')(.*?)\1", // ("|')(.*?)\1
"\2"
) )
a "b" c
(\! "エスケープは文字列内に引用符を挿入します。コメントは文字列のテキストを示します。)この例では、\ 1グループは"または'のいずれかに一致し、\2は別のオカレンスまでのすべてのテキストに一致します。 \1。
そのような正規表現を書く場合は、コメントを使用してください。 次のメンテナはそれを高く評価するでしょう。
Re:文字列に隣接する番号を抽出します正規表現を練習してテストするのに適した場所はhttps://regex101.com/ 。

JMPエスケープ文字が削除されたコメントは非常に役に立ちました。より複雑な正規表現パターンを作成するときに、コメントを追加し始める必要があります(エスケープ文字に関する正規表現の問題)。
Re:文字列に隣接する番号を抽出しますやあ@Craige_Hales 、
議論を充実させていただきありがとうございます。
実際、私はあなたの古い記事からJMPの正規表現について最初に学びました!
https://community.jmp.com/t5/Uncharted/Regex/ba-p/21008
Re:文字列に隣接する番号を抽出しますこんにちは@jthi
この問題の代替ソリューションと、正規表現へのリンクをありがとうございます。