使用LEFT抓取一个角色,同时忽略特定角色

时间:2015-02-22 22:22:29

标签: regex vba word-vba

好的,所以我知道你可以使用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"

之后,我可以轻松地抓住","使用上面提到的左(右(A,3),1)代码。

所有这一切都不必使用LEFT函数完成,但我假设这是可行的方法,或者可能正则表达式可以立即清除所有内容?

谢谢!

3 个答案:

答案 0 :(得分:2)

这将获得空间左侧的所有内容:

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以获取下一组数据,直到遇到另一个空格。您可以继续增加数字,直到它用完文本块。要查找最大块,请使用ubound(Split(myTxt1,""))

如果您使用左侧功能设置了心脏,可以使用instr(字符串)找到空格的数字字符:

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)

希望这可以帮助你现在和将来。

答案 1 :(得分:0)

这是一些代码,我去寻找一个数字,最后从字符串中删除所有非数字(和非小数和非逗号)字符,直到找到一个可识别的数字。

    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读取一行文字。然后它通过chyaracter位置Arg(3)等提取柱子是命令行参数3 =开始列,4 =结束列。

它测试提取的列是否为数字。如果没有,它会搜索并替换删除所有不是0-9,逗号或小数的字符。

然后我测试它现在是否为数字,如果不是我设置为0,否则我将转换为单个数据类型。

对于你来说,这是搜索和替换,你只剩下数字,小数点和逗号。

答案 2 :(得分:0)

这是我最后使用的解决方案。它包括RegExp功能,因此您必须启用" Microsoft VBScript正则表达式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

在此之后,我已经追踪了","带符号"左"功能

Dim decSym As String
decSym = Left(Right(myValue, 3), 1)
MsgBox decSym 'shows ","