\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 資料編號 1”
然後將是:「*00001 DATA no 1」(在本例中我新增了「*」)
如果是:“資料號 1”
那麼將是:「DATA no 1」(在這種情況下沒有變化)
可以使用正規表示式嗎?你能幫助我嗎?
多謝
你好詹保羅