在Microsoft Excel文件中,我的行中的文本如下所示:
HashMap<Integer,Integer> hm = new HashMap<Integer,Integer>();
hm.put(1,10);
hm.put(2,45);
hm.put(3,100);
Iterator<Integer> it = hm.keySet().iterator();
Integer fk = it.next();
Integer max = hm.get(fk);
while(it.hasNext()) {
Integer k = it.next();
Integer val = hm.get(k);
if (val > max){
max = val;
fk=k;
}
}
System.out.println("Max Value "+max+" is associated with "+fk+" key");
我需要删除花括号1. Rc8 {[%emt 0:00:05]} Rxc8 {[%emt 0:00:01]} 2. Rxc8 {[%emt 0:00:01]} Qxc8 {} 3. Qe7# 1-0
和{
中出现的任何文字,包括括号本身。
在上面的例子中,有三个花括号的实例。但有些行可能不止于此。
我尝试了}
输出到:=MID(LEFT(A2,FIND("}",A2)-1),FIND("{",A2)+1,LEN(A2))
。如您所见,这是这些花括号之间的第一个文本实例。
如果我们在SUBSTITUTE中使用此内容,请执行以下操作:{[%emt 0:00:05]}
我得到这样的输出:
=SUBSTITUTE(A2,MID(LEFT(A2,FIND("}",A2)),FIND("{",A2),LEN(A2)),"")
如果您注意到,则只删除一个实例。如何使其适用于所有实例?感谢。
答案 0 :(得分:3)
突出显示一切 去替换 在要替换的文本中输入{*} 留下替换为空白
这应该取代所有花括号和它们之间的任何东西
答案 1 :(得分:1)
尝试用户定义的功能。在VBA中创建对&#34; Microsoft VBScript Regular Expressions 5.5的引用。然后在模块中添加此代码。
Function RemoveTags(ByVal Value As String) As String
Dim rx As New RegExp
rx.Global = True
rx.Pattern = " ?{.*?}"
RemoveTags = Trim(rx.Replace(Value, ""))
End Function
在单元格的工作表中输入:=RemoveTags(A1)
或您要删除文本的地址。
如果你想在VBA中测试它:
Sub test()
Dim a As String
a = "Rc8 {[%emt 0:00:05]} Rxc8 {[%emt 0:00:01]}"
Debug.Print RemoveTags(a)
End Sub
输出&#34; Rc8 Rxc8&#34;
答案 2 :(得分:1)
如果没有VBA,这并不容易,但还有一种方法。
要么(正如yu_ominae所建议的那样)只使用这样的公式并自动填充它:
=IFERROR(SUBSTITUTE(A2,MID(LEFT(A2,FIND("}",A2)),FIND("{",A2),LEN(A2)),""),A2)
另一种方法是迭代计算(转到选项 - &gt;公式 - &gt;检查“启用迭代计算”按钮)
要在一个单元格中执行此操作,您需要1个辅助单元格(对于我的示例,我们将使用C1
)并在B2中使用这样的公式并自动填充:
=IF($C$1,A2,IFERROR(SUBSTITUTE(B2,MID(LEFT(B2,FIND("}",B2)),FIND("{",B2),LEN(B2)),""),B2))
在C1中加“1”,B:B中的所有公式都显示A:A的值。现在转到C1并多次点击del键(你会看到“{}” - 部分消失),直到所有看起来都像你想要的那样。
编辑:要通过VBA进行,但没有正则表达式,您只需将其放入模块中即可:
Public Function DELBRC(ByVal str As String) As String
While InStr(str, "{") > 0 And InStr(str, "}") > InStr(str, "{")
str = Left(str, InStr(str, "{") - 1) & Mid(str, InStr(str, "}") + 1)
Wend
DELBRC = Trim(str)
End Function
然后在工作表中直接使用:
=DELBRC(A2)
如果您还有任何疑问,请询问;)