替换除匹配的正则表达式字符串之外的所有内容

时间:2018-02-23 15:51:51

标签: regex vba

我已经搜索过这个答案,但还没找到一个确切有效的答案。

我有以下模式,其中哈希是任何数字:102 ### - ###:##### - ###或102 ### - ###:##### - # ###

它必须从102开始,模式中的最后一个设置可以是3或4位数。

问题在于我可以在其中包含1-5个这些模式之间的字符串,其中包含任何类型的字符(空格,字母等)。我在下面发布的正则表达式很好地匹配模式,但我试图选择不是这种模式的所有内容,所以我可以删除它。最终目标是提取所有模式,并将所有模式以逗号分隔为输出。 (模式,模式,模式)我如何使用正则表达式完成此操作?也许有一种比尝试使用此行更好的方法?谢谢。这是使用VBA。

正则表达式:(\D102\d{3}-\d{3}:\d{5}-\d{3,4}\D)

字符串示例:type:102456-345:56746-234 102456-345:56746-2343 FollowingCell#:102456-345:56746-234 exampletext#@$% 102456-345:56746-2345 stuff

2 个答案:

答案 0 :(得分:1)

无需抓住您不需要删除的所有内容:这更难。只需抓住您需要的一切,随心所欲地做任何事情。

See regex in use here

(?<!\d)102\d{3}-\d{3}:\d{5}-\d{3,4}(?!\d)

See code in use here

Imports System.Text.RegularExpressions
Module Module1
  Sub Main()
    Dim sourcestring as String = "type:102456-345:56746-234 102456-345:56746-2343 FollowingCell#:102456-345:56746-234 exampletext#@$% 102456-345:56746-2345 stuff"
    Dim re As Regex = New Regex("(?<!\d)102\d{3}-\d{3}:\d{5}-\d{3,4}(?!\d)")
    Dim mc as MatchCollection = re.Matches(sourcestring)
    For each m as Match in mc
      Console.WriteLine(m.Groups(0).Value)
    Next
  End Sub
End Module

结果:

102456-345:56746-234
102456-345:56746-2343
102456-345:56746-234
102456-345:56746-2345

答案 1 :(得分:0)

  

我正在尝试选择不是这种模式的所有内容,以便我可以删除它。最终目标是提取所有模式,并将所有模式以逗号分隔为输出

如果你想提取模式,那么就这样做,而不去除周围的一切。 Python中的示例:(在问题&#39;语言被指定之前发布,但我确信在VBA中可以完成相同的操作。)

>>> import re
>>> p = r"102\d{3}-\d{3}:\d{5}-\d{3,4}"
>>> text = "type:102456-345:56746-234 102456-345:56746-2343 FollowingCell#:102456-345:56746-234 exampletext#@$% 102456-345:56746-2345 stuff"
>>> ",".join(re.findall(p, text))
'102456-345:56746-234,102456-345:56746-2343,102456-345:56746-234,102456-345:56746-2345'