我有超過600個字符的長字符串。我想用「|」替換長度小於200的字邊界。搜索一個長度的單詞邊界並用'|'代替它
我已經使用下面的代碼來做到這一點。但我沒有任何運氣。
data test;
length str1 $200;
str1 = "N=dddddd dddddd dddddd dddddddddd ddd ddddd dddddddd dd d ,n=,|t:14.2.2-1";
run;
data test1;
set test;
str01 = prxchange('s/\b/|/', -1, str1);
str02 = prxchange('s/(.{20,}?\b).*/|/', -1, str1);
run;
我知道第一個將搜索所有單詞邊界,並取代它們「|」,但我認爲第二個會工作。但後來只給了我'''作爲輸出。
我在找的是打破一個長的腳註(超過600個字符)在4行語句中被分解,因爲行不能超過200個字符。所以我會用'|'替換長度不超過200的空間並使用'|'將字符串分解
在此先感謝!
在實時情況下,我有以下情況。
data test;
length str1 $200;
str1 = "XX XX XXXXX XXXX XXXXXXX XXX XXXXX X XXXXXX XXXXXXX XXXXXXXXX XX XXX XXXXXXXXX XXXXXXXXXXXX'X XXXXXX. XXXX XXXXXXXXX XX XXXXXXXXXX XXXXXXXXXX XXX XXXXXXXX. XXX XXXXXXX XXX XXXX XXXXXXXX XXXXXX XXXXXXXXXX XXX XXXXXXXXXX XXXX XXX XXXXX XXX XX XXXX XX XXXX XXXXXXX XXXXXXXXXX XXXXX XX XXX XXXXX XXX XXX XXXXX XX XXX XXXXXXXXXXX XXX XXXXXXXXXX XXXXX 11112525 65, XX XXXXX XXX XXXXXX XXX XXX XXX. XXXXXXXXXXXX, XXX XXXX XXXXX XXX XXXXX XXXXXXXX XXXX XXX XXXX XXXXXX XXXXXXXX XX "XXXXXXXX XXXXXXXX" XX XXX XXX XXXXXX XXX XXXX XXXXXXXXXXX XX XXXXXXXXXX XXXXX XX XXX XXX XXXXXXX XXXXXX. XXXX XX XX XXXX XXXXXX XXXXX XXXXXXXX XXXXX XXXXXXXX XXX XXXXXX XXXX XXXXXXXXXX XXXXXXXXXX XXX XXX XXXXXXXXXXXX XXXXXXX XXXXXXXXXX XXX XXXXXXXX XXXX. XXXXXXX, XXX XXXXXXX XXX XXXXXX XX "XXXXXXXX XXXXXXX - XX XXX XXXXXXX" XXX XXX XXXXXX XXXXX XXX XXX XXXXXXX XXXX XXXXXXX XXXXXXXXXX XXX XXXXXXXXXX X XXXXXXXXXXX XXXXXXXXXX XX XXXX XXXXX. XXXXXXXXXXX XXXX XXXXXXXXX XXXX XXX XXXXXXX XXX XXXXXXXX X XXXXXXXXXX XXXXXXXXX, X XXXX XXX XXXX XX XXXXXX XXXXX, XXXXXXX XXXX XXXX XXXXXXXX XXXXXX XX XX XXXXXX XX XXXXXXXXX XXXXXX XXXXXXXX XXX XXXXXXXXXX XXXXXXX XX XXXXXXXXXX/XXXXXXXXXX XXX XXXXXXXX XXXXXXXXXX XX XXXXXXXX XXXXXXXX XX XXX XXX XXXXXX XX XXXXXX XXXX XXXX XXX XXX XXXXXXX XXXXXXXXXX XXXXXXXXXX. XXXX, XXX XXXXXXXX XXXXXXXX (XX XXXX XXXXX XXX XXXXXX) XXXX XXXXXXX XX XXX XXX XX XXX "XXXXXXXX XXXXXXXX - XX XXX XXXXXXX/XX XXXXXXXXXX". XXX XXXX XX XXX XXXXXXXXX XXXX XXXX XXXX XX XXXXXXXXX XXXX XX XXXXXXX XX XXXXXX. XXX XXXXXXX XXX XXXXXX XXXX XXX XXXXXXX XXXXXX XXXXXX XX XXX XXXXX XX XXXX XXXX, XXX XXX XXXXX XXXX XX XXXXXX XXXX XX X XXXXXXXXX.";
run;
如所建議的,我使用:
data test1;
set test;
str01 = prxchange('s/(.{200,}?)\b\s*/\1|/', -1, compbl(str1));
run;
但是,它不是在長度小於或等於200個字符在單詞boundry放置管。它放置在200以上的管道上,即表達式正在進入(200以上)而不是後退(在200之前或之後)以放置管道。
請讓我知道我們在正則表達式中缺少的東西。
非常感謝!
@stribizhev感謝您的幫助!兩人都得到了同樣的結果,並且得到了我想要的結果。最近的,因爲它用|替換空格和空間。有沒有辦法除了|之外沒有空間也不應該給| |哪裏已經有|。另外,您能否詳細說明您的解決方案是以$ 0還是$ 1做的?我們是否可以進行條件搜索並進行替換,即僅在長度超過200時才進行搜索和替換?再次感謝! –
自從我給出答案後,我刪除了評論。至於** $ 0或$ 1做什麼?**,我想我在下面的答案中澄清了這一點。我現在會更新我的答案。 –