我已经搜索过这个答案,但还没找到一个确切有效的答案。
我有以下模式,其中哈希是任何数字: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
答案 0 :(得分:1)
无需抓住您不需要删除的所有内容:这更难。只需抓住您需要的一切,随心所欲地做任何事情。
(?<!\d)102\d{3}-\d{3}:\d{5}-\d{3,4}(?!\d)
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'