我有一个像这样的字符串
blabla (lo-g) (kk-jj)
我想像这样
blabla (lo-g)
但是在vb.net中已经是这样的时候
blabla (lo-g) with one parenteses
只需按原样
谢谢
答案 0 :(得分:1)
Regex是一种功能强大,灵活且可配置的工具,可用于执行此类操作。从您的问题尚不清楚,在输入的其他变体中究竟需要遵循哪些规则,但这是一个示例,适用于您指定的输入:
Dim input As String = "blabla (lo-g) (kk-jj)"
Dim pattern As String = "(?<=^[^(]*\([^)]*\)\s*)\([^)]*\)(?=\s*$)"
Dim output As String = Regex.Replace(input, pattern, "")
但是,这不会删除像这样的输入的第二组括号:
blabla (lo-g) blabla (kk-jj) blabla
blabla (lo-g) (kk-jj) blabla
要处理此类变化,可以使用以下模式:
Dim input As String = "blabla (lo-g) with (kk-jj) trailing"
Dim pattern As String = "(?<=^[^(]*\([^)]*\)[^(]*)\([^)]*\)(?=[^(]*$)"
Dim output As String = Regex.Replace(input, pattern, "")
答案 1 :(得分:1)
我要感谢史蒂文的回答,但也感谢那些无法处理正则表达式的人(例如我) 这是一个简单的愚蠢方法
Dim res As String = String.Empty
Dim check As Boolean = False
For Each letter In teamname
If letter = "(" Then
If check = True Then
Exit For
End If
check = True
End If
res &= letter
Next
Return res
祝你好运
答案 2 :(得分:0)
由于您要避免使用RegEx,因此阅读版本我认为可以更简单/轻松地了解您要通过循环遍历每个字符完成的工作。基本上,您使用(字符作为分隔符将字符串分割成一个数组。因此,需要重新添加它们,但由于您只需要包含(或不包括)1,因此它们是名义上的。
基本上将您的字符串拆分为以下内容: “ blabla(lo-g)(kk-jj)”
Array(0)=“ blabla” Array(1)=“ lo-g)”
因此,Array(0)&“(”&Array(1)=“ blabla(lo-g)”,或者如果计数<= 1(字符
Dim SplitText = text.Split("(")
If SplitText.Length > 1 Then
Return String.Format("{0}({1}", text.Split("(")(0), text.Split("(")(1))
'This may be easier for you to read, though:
'Return text.Split("(")(0) & "(" & text.Split("(")(1)
End If
Return text