\1\1
JSL REGEX 関数正規表現"\0" にデフォルト設定される format 引数があります。 \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");
「この部分:怠け者の上に
これがあります:以上
そしてこれ:レイジー
四文字の言葉」
最初の 6 文字の例は、6 文字より長い単語がなかったのでうまくいきました。 4 文字の単語の例はもっと複雑です。単語の境界を一致させるために \b を使用しています。 境界テストなしでは、クイック四字熟語のようです。 format 引数は、後方参照 \0、\1、および \2 を使用して 4 行すべてのテキストを生成しました。 \1 は括弧で囲まれた最初のグループで、\2 は 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 - パターンから一致した式の 1 つを置き換えます
- \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+ を使用すると、単語に少なくとも 1 つの文字が含まれていることを主張することによって、問題を回避することもできます。
手前がテネシーワルツ。
2017 年 2 月 4 日の更新: 新しいコミュニティのフォーマット (および画像) を修正しました。
@ジャンパオロ:
あなたの観察は完全に正しいです。 それは私の側のタイプミスと見落としでした。 あなたが投稿したスクリプトは正しいです
助けてくれてどうもありがとう、
FOR Cicleで「ColsList」の代わりに「Colnames」を使用すると、スクリプトが機能すると思います
グローバルをクリア();
ログをクリア();
dt =現在のデータ テーブル();
ColNames = dt <<列名を取得する( "弦" );
ために( i = 1 、私 <= Nアイテム(ColNames)、i++、
もしも( !不足している(正規表現(シャア(ColNames[i])、 "^[0-9]" ) ) 、
列 =桁( dt, i ); // dt はデータ テーブルです
ColName = 列 <<名前を取得;
新しい名前 =連結( 「*」 、ColName );
列 <<セット名( 新しい名前 );
)
);
私はjmpスクリプトの初心者です...間違っていたら許してください
正規表現を次のように変更する必要がある場合があります
<SPAN class="token string">"^[0-9]"</SPAN>
文字列の先頭にある文字を強制的に検索します。 それ以外の場合は、Column7 のような名前が一致します。
@ジャンパオロ、
ここに対処する 1 つの方法があります。私の提案は、そのような質問を「ディスカッション」に投稿し、ブログへのリンクを提供することです。 コミュニティはあなたの質問に迅速に対応できるようになります:
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) のスクリーンショットを提供します。
Craige_Hales さん、こんにちは。
私の作品を適用するのに非常に興味深い「正規表現」関数を見つけました。
スクリプトの Comuns 名を詳細に変更する必要があります。列名が数字で始まるときに文字を挿入したいと考えています。
例: "00001 DATA no 1"
「*00001 DATA no 1」(この場合は「*」を追加)
ある場合: "DATA no 1"
「DATA no 1」(この場合は変更なし)
正規表現を使用することは可能ですか?手伝って頂けますか?
どうもありがとう
チャオ・ジャンパオロ