
大量の JMP 文字関数が前の投稿: 長さ、部分文字列、含むなど。 シンプルなものに最適です。できるあなたが望むなら、彼らと一緒に難しいことをしてください。 しかし、正規表現の方が良いかもしれません。
正規表現、略称正規表現は、テキストを操作するための強力な JSL 関数です。
result = regex( sourceText, searchPattern, replaceTemplate, options );
(JSL には、名前に Regex が含まれる関数が他に 2 つあります。ここでは、バニラの「regex」だけを見てください。 特に列の数式で使用している場合は、これが必要です。)
これは正規表現の非常に不完全な入門です (ただし、JMP の正規表現関数についてはかなり完全な説明です)。 正規表現に関するチュートリアルは Web 上にたくさんあります。 JMPの正規表現検索パターンPerl の正規表現に似ています。
の検索パターンは正規表現で、検索するテキストを説明します。 のテンプレートを置き換える一致したテキストがどのように置換されるかを説明します一致したテキストの一部を使用できますテンプレート内にあります。 次の例では、わかりやすくするために最初の引数にリテラル文字列 (引用符で囲んだ) を使用していますが、変数には、ソーステキストほとんどの場合、もっと理にかなっています。
regex( "123 456 789", "[0-9]*")
「123」
この例には 2 つの引数があります。ソーステキストと検索パターン。 searchPattern は角括弧を使用して文字のセットを作成します。 ハイフンのショートカットは範囲を指定します。 [a-zA-Z] を使用すると、すべての大文字と小文字の ASCII 文字のセットを作成できます。 アスタリスク (*) は、「前のパターンを 0 回以上繰り返す」ことを意味します。 \d は、すべての数字のセットのショートカットです。
regex( "123 456 789", "\d*")
「123」
[0123456789] のような文字セットは、帽子で始めることで無効にすることができます。 [^0123456789] は、数字ではない任意の文字と一致します。 \d などの一部のショートカットは、文字セットとして表すことができます。
| \w |
[a-zA-Z0-9_] |
単語の文字 |
| \W |
[^a-zA-Z0-9_] |
単語の文字ではありません |
| \d |
[0-9] |
数字 |
| \D |
[^0-9] |
数字ではありません |
| \s |
[ \t\v\f] |
ホワイトスペースには、タブ、リターン、改行、垂直タブ、フォームフィードが含まれます |
| \S |
[^ \t\v\f] |
空白ではない |
上記のショートカットはすべて 1 つの文字に一致します。 を追加できます。アスタリスク
\s*
の実行に一致するようにゼロ以上空白文字。 または、プラス
\D+
の実行に一致するように1 つ以上の数字以外の文字。 または、疑問符
\え?
合わせるゼロまたは 1単語の文字。
アスタリスク、プラス、疑問符は繰り返し演算子であり、よく深い。 貪欲とは、できるだけ多くのテキストを取得し、必要に応じて後で取り下げることを意味します。 疑問符を追加することで、消極的にすることができます。 一般に、貪欲な行動はあなたが望む行動ですが、常にそうとは限りません。
括弧、後方参照、およびテンプレートを置き換える
正規表現の力の多くは、検索パターンそしてそのテンプレートを置き換える。 インタラクションは、\0、\1、\2、... として表される後方参照を使用して作成されます。 replaceTemplate のデフォルト値は「\0」です。 後方参照 \0 は、一致したテキスト全体です。 かっこは正規表現で使用され、パターンのビットをグループ化してより大きなパターンを形成します。 例えば
regex( "cat dog catog cadog cat dog", "cat|dog", "***", GLOBALREPLACE)
「*** *** ***og ca*** *** ***」
regex( "cat dog catog cadog cat dog", "ca(t|d)og", "***", GLOBALREPLACE)
「猫犬****猫犬」
垂直バーは選択肢を区切っており、優先順位は非常に低くなります。 2 番目の例では、括弧を使用して t または d をグループ化します。 のテンプレートを置き換えるは定数テキスト、*** です。 ただし、各開き括弧は新しい後方参照を開始し、後方参照はテンプレートで使用できます。
regex( "cat dog catog cadog cat dog", "ca(t|d)og", " \1 ", GLOBALREPLACE)
「猫犬td猫犬」
GLOBALREPLACE を使用すると、正規表現はすべての一致を検索して置換します。パターンは catog または cadog のいずれかに一致します。 後方参照は、かっこ内のパターンの部分であるため、t または d のいずれかになります。 テンプレートは \1 値の周囲にいくつかのスペースを追加し、一致した各 catog または cadog をテンプレートで置き換えます。
複数の括弧のペアをネストして連続して使用できます。 開き括弧を数えるだけで、後方参照番号がわかります。
データテーブルの式
正規表現を使用した姓と名の例を次に示します。
Column formula using regex()Column formula using regex()Column formula using regex()Column formula using regex() regex() を使用した列の式
この例では、アンカー ^ と $ (緑色の下線) を使用します。 ^ は文字列の先頭に一致し、$ は文字列の末尾に一致します。 \w* は 0 個以上の単語文字に一致します。この例は単純すぎるかもしれません。特殊文字や空白を含む名前は処理されません。 逆参照を使用してカンマで区切るように再加工できます。 Regex(名前, "([^,]*)", "\1")とRegex(名前, "\s*([^,]*)$", "\1")多分。「([^,]*)」カンマ以外の 0 個以上の文字を意味します。 "\s*([^,]*)$" 0 個以上のスペースをスキップし、カンマ以外はすべて保持し、最後に来ることを意味します。 の中に「([^,]*)」 \1 と \0 が同じ場合。 しかし、 "\s*([^,]*)$", \s* が \1 の括弧の外側にあるため、\0 には \1 にはない先頭のスペースがある可能性があります。
正規表現にはさらに多くの機能があり、Web 上の他の場所で詳しく説明されています (正規表現を検索してください)。 また、スクリプト索引にあるアリスとジェリーの例も、後方参照をどのように使用できるかわからない場合には非常に優れています。
次はパターンマッチング関数です。
2017 年 1 月 29 日更新: 新しいコミュニティのフォーマットを修正しました。
@Craige_Hales
こんにちはクレイジ、この投稿は本当に役に立ち、ありがとうございます。
他にも多くのバリエーションがあり、正規表現構文の詳細が記載されている正規表現に関するドキュメントはありますか?
ありがとう