【问题标题】:Take part of string before known value [duplicate]在已知值之前获取部分字符串[重复]
【发布时间】:2019-07-03 20:42:19
【问题描述】:

我有一个十六进制值的字符串,例如:

01 02 03 AA BB CC FF 09 65 AA BB DE F2

我的需要是在第一个AA BB之前加入这个字符串。我尝试用正则表达式来做。我的想法是这样的:

(([0-9A-F]{2} )+(AA BB )){1}

比赛结束后拿第一组。但它不起作用。有人可以帮我完成这项任务吗?

【问题讨论】:

  • 如果您想使用正则表达式,请使用现有的,但将 + 替换为 +?。更好的是,使用类似str1.Substring(0, str1.IndexOf("AA BB"));
  • @WiktorStribiżew 好的,谢谢!

标签: .net regex


【解决方案1】:

我的猜测是你设计的表情看起来不错,可能是这个稍微的修改

^([0-9A-F]{2}\s?)+(?=\sAA BB).*$

可能会奏效。

Demo 1

或者如果我们不进行验证,也许这些表达式会起作用:

^(.+?)(?=\sAA BB).*$

Demo 2

^(.+?)(?:\sAA BB.*)$

Demo 3


编辑

或者如果模式可能重复:

(.+?)(?:\sAA BB\s*.*?)

Demo 4

【讨论】:

  • 这种模式“01 02 03 AA BB CC FF”可能只是一个字符串的开头,字符串可能更长。此外,“AA BB”可以在字符串中进一步呈现。我需要在字符串中第一个“AA BB”之前的部分。您的解决方案对我不起作用,抱歉...
【解决方案2】:

如果您将该正则表达式更改为 (([0-9A-F]{2}\s)+)(AA BB ),您可以在第一组中捕获“01 02 03”

【讨论】:

    猜你喜欢
    • 2019-10-05
    • 2018-04-14
    • 2021-02-03
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    相关资源
    最近更新 更多