使用 LEFT 抓取一个字符,同时忽略特定字符
Grab a character using LEFT while ignoring specific characters
好的,我知道你可以使用 LEFT 函数抓取任何字符:
Left(Right(A,3),1)
(非常感谢 Serenity 给我看这个)
我想弄清楚的是,如果你有这样设置的变量:
myTxt1 = "2513,82 alpha"
myTxt2 = "999,71 somekindofexpression"
myTxt3 = "55,7 orange"
...你如何让他们出来:
myTxt1 = "2513,82"
myTxt2 = "999,71"
myTxt3 = "55,7"
之后我可以使用上面提到的 Left(Right(A,3),1) 代码轻松抓取“,”。
所有这些都不必使用 LEFT 函数来完成,但我假设这是可行的方法,或者可能正则表达式可以一次清除所有内容?
谢谢!
这是我寻找数字的一些代码,最终从字符串中删除所有非数字(以及非小数和非逗号)字符,直到我找到一个可识别的数字。
Lne = Inp.readline
SortKey = Mid(Lne, LCase(Arg(3)), LCase(Arg(4)) - LCase(Arg(3)))
If IsNumeric(Sortkey) = False then
Set RE = new Regexp
re.Pattern = "[^0-9\.,]"
re.global = true
re.ignorecase = true
Sortkey = re.replace(Sortkey, "")
End If
If IsNumeric(Sortkey) = False then
Sortkey = 0
ElseIf Sortkey = "" then
Sortkey = 0
ElseIf IsNull(Sortkey) = true then
Sortkey = 0
End If
.AddNew
.Fields("SortKey").value = CSng(SortKey)
.Fields("Txt").value = Lne
.UpDate
Loop
它来自一个更大的程序。
它从 StdIn 读取一行文本。然后它通过字符位置提取列 Arg(3) 等是命令行参数 3 = 开始列,4 = 结束列。
它测试提取的列是否为数字。如果不是,它会搜索并替换所有非 0-9、逗号或小数的字符。
然后我测试它现在是否是一个数字,如果不是我设置为 0,否则我转换为单一数据类型。
对你来说是搜索和替换,你只剩下数字、小数点和逗号。
这将获取 space 左侧的所有内容:
Sub myTxt()
'Set the strings according to your post
myTxt1 = "2513,82 alpha"
myTxt2 = "999,71 somekindofexpression"
myTxt3 = "55,7 orange"
'Split the strings to an array using a space as the delimiter then assign the first element to the variable
myTxt1 = Split(myTxt1, " ")(0)
myTxt2 = Split(myTxt2, " ")(0)
myTxt3 = Split(myTxt3, " ")(0)
'Display the results
MsgBox "myTxt1 = " & myTxt1 & vbLf & "myTxt2 = " & myTxt2 & vbLf & "myTxt3 = " & myTxt3
End Sub
将 0 更改为 1 以获得下一组数据,直到遇到另一个 space。您可以不断增加数字,直到它用完文本块。要查找最大块,请使用 ubound(Split(myTxt1, " "))
如果您决定使用 left 函数,您可以使用 instr (In String) 找到 space 的数字字符:
instr(1,myTxt1," ")
然后您可以将其与左函数结合起来,如下所示:
Left(myText,instr(1,myTxt1," ")-1) 'Remove 1 to get rid of the space from the returned string
最后,您可以在此处使用数组来允许可扩展的输入量,如下所示:
Sub myTxt2()
Dim myTxt As Variant, X As Long
'Input your data to an array (Comma seperate your values)
myTxt = Array("2513,82 alpha", "999,71 somekindofexpression", "55,7 orange")
'Loop through the array one element at a time
For X = LBound(myTxt) To UBound(myTxt)
'Replace the element with just the first chunk of the value
myTxt(X) = Split(myTxt(X), " ")(0)
Next
'Display results
MsgBox Join(myTxt, vbLf)
End Sub
您的数据仍然可以访问,但不再是 myTxt1、myTxt2、myTxt3,现在分别是 myTxt(1)、myTxt(2)、myTxt(3)
希望这对您现在和将来有所帮助。
这是我最后使用的解决方案。它包括 RegExp 功能,因此您必须在 Tools/References.
中启用 "Microsoft VBScript Regular Expressions 5.5"
Dim myVal as Variant
Dim colMatches As MatchCollection
Dim objMatch As Match
myVal = "We've earned €20.000,00 last night."
Set rgex = New RegExp
rgex.Pattern = "[0-9].*[0-9]"
Set colMatches = rgex.Execute(myValue)
For Each objMatch In colMatches
myValue = objMatch.Value
MsgBox myValue 'shows "20.000,00"
Next
之后,我用 "Left" 函数
追踪了“,”符号
Dim decSym As String
decSym = Left(Right(myValue, 3), 1)
MsgBox decSym 'shows ","
好的,我知道你可以使用 LEFT 函数抓取任何字符:
Left(Right(A,3),1)
(非常感谢 Serenity 给我看这个)
我想弄清楚的是,如果你有这样设置的变量:
myTxt1 = "2513,82 alpha"
myTxt2 = "999,71 somekindofexpression"
myTxt3 = "55,7 orange"
...你如何让他们出来:
myTxt1 = "2513,82"
myTxt2 = "999,71"
myTxt3 = "55,7"
之后我可以使用上面提到的 Left(Right(A,3),1) 代码轻松抓取“,”。
所有这些都不必使用 LEFT 函数来完成,但我假设这是可行的方法,或者可能正则表达式可以一次清除所有内容?
谢谢!
这是我寻找数字的一些代码,最终从字符串中删除所有非数字(以及非小数和非逗号)字符,直到我找到一个可识别的数字。
Lne = Inp.readline
SortKey = Mid(Lne, LCase(Arg(3)), LCase(Arg(4)) - LCase(Arg(3)))
If IsNumeric(Sortkey) = False then
Set RE = new Regexp
re.Pattern = "[^0-9\.,]"
re.global = true
re.ignorecase = true
Sortkey = re.replace(Sortkey, "")
End If
If IsNumeric(Sortkey) = False then
Sortkey = 0
ElseIf Sortkey = "" then
Sortkey = 0
ElseIf IsNull(Sortkey) = true then
Sortkey = 0
End If
.AddNew
.Fields("SortKey").value = CSng(SortKey)
.Fields("Txt").value = Lne
.UpDate
Loop
它来自一个更大的程序。
它从 StdIn 读取一行文本。然后它通过字符位置提取列 Arg(3) 等是命令行参数 3 = 开始列,4 = 结束列。
它测试提取的列是否为数字。如果不是,它会搜索并替换所有非 0-9、逗号或小数的字符。
然后我测试它现在是否是一个数字,如果不是我设置为 0,否则我转换为单一数据类型。
对你来说是搜索和替换,你只剩下数字、小数点和逗号。
这将获取 space 左侧的所有内容:
Sub myTxt()
'Set the strings according to your post
myTxt1 = "2513,82 alpha"
myTxt2 = "999,71 somekindofexpression"
myTxt3 = "55,7 orange"
'Split the strings to an array using a space as the delimiter then assign the first element to the variable
myTxt1 = Split(myTxt1, " ")(0)
myTxt2 = Split(myTxt2, " ")(0)
myTxt3 = Split(myTxt3, " ")(0)
'Display the results
MsgBox "myTxt1 = " & myTxt1 & vbLf & "myTxt2 = " & myTxt2 & vbLf & "myTxt3 = " & myTxt3
End Sub
将 0 更改为 1 以获得下一组数据,直到遇到另一个 space。您可以不断增加数字,直到它用完文本块。要查找最大块,请使用 ubound(Split(myTxt1, " "))
如果您决定使用 left 函数,您可以使用 instr (In String) 找到 space 的数字字符:
instr(1,myTxt1," ")
然后您可以将其与左函数结合起来,如下所示:
Left(myText,instr(1,myTxt1," ")-1) 'Remove 1 to get rid of the space from the returned string
最后,您可以在此处使用数组来允许可扩展的输入量,如下所示:
Sub myTxt2()
Dim myTxt As Variant, X As Long
'Input your data to an array (Comma seperate your values)
myTxt = Array("2513,82 alpha", "999,71 somekindofexpression", "55,7 orange")
'Loop through the array one element at a time
For X = LBound(myTxt) To UBound(myTxt)
'Replace the element with just the first chunk of the value
myTxt(X) = Split(myTxt(X), " ")(0)
Next
'Display results
MsgBox Join(myTxt, vbLf)
End Sub
您的数据仍然可以访问,但不再是 myTxt1、myTxt2、myTxt3,现在分别是 myTxt(1)、myTxt(2)、myTxt(3)
希望这对您现在和将来有所帮助。
这是我最后使用的解决方案。它包括 RegExp 功能,因此您必须在 Tools/References.
中启用 "Microsoft VBScript Regular Expressions 5.5"Dim myVal as Variant
Dim colMatches As MatchCollection
Dim objMatch As Match
myVal = "We've earned €20.000,00 last night."
Set rgex = New RegExp
rgex.Pattern = "[0-9].*[0-9]"
Set colMatches = rgex.Execute(myValue)
For Each objMatch In colMatches
myValue = objMatch.Value
MsgBox myValue 'shows "20.000,00"
Next
之后,我用 "Left" 函数
追踪了“,”符号Dim decSym As String
decSym = Left(Right(myValue, 3), 1)
MsgBox decSym 'shows ","