\1\1
JSL 正則表達式函數正則表達式有一個默認為“\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 來匹配單詞邊界。 沒有邊界測試,快似乎是一個四個字母的單詞。 格式參數使用反向引用 \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 日更新:修復了新社區的格式(和圖片)。
@詹保羅:
你的觀察是完全正確的。 這是我的錯字和疏忽。 您發布的腳本是正確的
非常感謝你的幫助,
如果我在 FOR Cicle 中使用“Colnames”而不是“ColsList”,我只是認為腳本可以工作
清除全局變量();
清除日誌();
dt =當前數據表();
列名 = dt <<獲取列名( “細繩” );
為了( 我 = 1個, 我 <= N 項( ColNames ), i++,
如果(!不見了(正則表達式(字符( ColNames[i] ), “^[0-9]” ) ),
上校=柱子(dt,我); // 其中 dt 是你的數據表
列名 = 列 <<獲取名稱;
新名稱 =連續( “*” , 列名 );
列<<設置名稱( 新名字 );
)
);
我是 jmp 腳本的初學者...如果我錯了請原諒我
您可能需要將正則表達式更改為
<SPAN class="token string">"^[0-9]"</SPAN>
強制它在字符串的開頭找到字符。 否則像 Column7 這樣的名稱將匹配。
@詹保羅,
這是解決問題的一種方法。我的建議是在“討論”中發布此類問題 - 並提供博客鏈接。 社區將能夠更快地解決您的問題:
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”(在這種情況下我添加了'*')
如果是:“數據 1”
然後將是:“DATA no 1”(在這種情況下沒有變化)
可以使用正則表達式嗎?你能幫助我嗎?
多謝
再見詹保羅