我想将一个文本组合替换为另一个组合。例如
nm libdynlib.so | grep printMe_dyn
00000000000006e0 T printMe_dyn
必填结果:Sub Test()
SplitText ThisWorkbook.Worksheets("Sheet1").Range("A1:A11")
End Sub
Sub SplitText(SrcRange As Range)
Dim rCell As Range
For Each rCell In SrcRange.Cells
rCell.Offset(, 1) = Left(rCell, InStrRev(rCell, " ") - 1)
rCell.Offset(, 2) = Mid(rCell, InStrRev(rCell, " ") + 1)
Next rCell
End Sub
我想要替换的这种组合。我对使用宏或FCMP或if else条件不感兴趣。
是否有任何功能可以同时执行所有操作?我尝试使用Perl表达式,该表达式同时适用于一个data test;
a='raja\ram{work}italic';
if index(a,'\') then b=tranwrd(a,'\','\\');
if index(a,'{') then b=tranwrd(a,'{','\{');
if index(a,'}') then b=tranwrd(a,'}','\}');
if index(upcase(a),'ITALIC') then b=tranwrd(a,substr(a,index(upcase(a),'ITALIC'),length('ITALIC')),'\i');
run;
答案 0 :(得分:0)
你的正则表达式是正确的。你有一组字符,对,你想要总是\
前置?因此,搜索(该组字符之一),使用[...]
进行搜索,然后使用捕获组向其添加\
。这是转义字符,因此您必须在任何时候添加两个(\\
将其自身转义为\
)。
data test;
a='Hello\Goodbye{stuff}';
b= prxchange('s/([\\{}])/\\$1/',-1,a);
put b=;
run;
您应该在第二个表达式中执行italic
位(或者只使用tranwrd
)。这是一个完全不同的替代品,虽然理论上可以放在一个,但会使它太乱。
答案 1 :(得分:0)
这个问题几乎与其他问题相同:Multiple search and replace within a string through regular expression in SAS
这是巧合吗?以下是适用于其他问题的代码。
abc\\pqr\{work\};
结果:%let text = BOLD\ITALIC\ITALICBOLD\BOLDITALIC\B\I\IB\BI;
data _null_;
var=prxchange("s/BOLD/b/",-1,"&text");
var=prxchange("s/ITALIC/i/",-1,var);
var=lowcase(var);
put var;
run;
b\i\ib\bi\b\i\ib\bi
结果:width