【问题标题】:Replacing everything but the matching regex string替换除匹配的正则表达式字符串之外的所有内容
【发布时间】:2018-02-23 15:51:51
【问题描述】:

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

我有以下模式,其中哈希是任何数字: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

【问题讨论】:

  • 请输入您使用的标签语言/技术。
  • 您忘记了捕获组的右括号。
  • Ehrm...如果您可以匹配所有出现的模式,为什么要删除它周围的所有内容?
  • 对不起。我已经编辑了语言,并修复了右括号。我只是在 VBA 中使用 Regex 库。
  • @UnderTheair 试试(?<!\d)102\d{3}-\d{3}:\d{5}-\d{3,4}(?!\d)

标签: regex vba


【解决方案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

【讨论】:

  • 这行得通。 @tobias_k 您的答案也很有效,只是我无法选择多个答案,而他的答案更适合该语言。谢谢。
【解决方案2】:

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

如果你想提取模式,那么就这样做,不要删除它们周围的所有东西。 Python 中的示例:(在指定问题的语言之前发布,但我确信在 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'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多