【问题标题】:Regular Expression/String split正则表达式/字符串拆分
【发布时间】:2016-06-20 23:24:02
【问题描述】:

我对 RegEx 的了解并不像我应该了解的那样熟悉。 但是,我正在寻找与值的变体匹配的表达式。

我有一个值列表(总共大约 30k):

ABCD1234
EF56789
GH123456J
GH123456JK
LMN654987P

我需要能够将前面的字母、中间的数字和末尾的字母分成 3 个不同的变量。这些值在开头的字符数量不确定,中间的数字数量不确定,结尾的字母数量不确定。

感谢任何帮助。

【问题讨论】:

    标签: c# .net regex string variant


    【解决方案1】:

    您可以使用正则表达式来捕获这样的组,而不是拆分:

    ([A-Z]+)([0-9]+)([A-Z]*)
    

    Working demo

    此外,如果您想匹配不区分大小写的字符串,您可以使用i 标志。

    Working demo

    比赛信息:

    MATCH 1
    1.  [0-4]   `ABCD`
    2.  [4-8]   `1234`
    3.  [8-8]   ``
    MATCH 2
    1.  [9-11]  `EF`
    2.  [11-16] `56789`
    3.  [16-16] ``
    MATCH 3
    1.  [17-19] `GH`
    2.  [19-25] `123456`
    3.  [25-26] `J`
    MATCH 4
    1.  [27-29] `GH`
    2.  [29-35] `123456`
    3.  [35-37] `JK`
    MATCH 5
    1.  [38-41] `LMN`
    2.  [41-47] `654987`
    3.  [47-48] `P`
    

    另外,如果你不想要空的内容,那么你可以使用这个正则表达式:

    ([a-z]+)([0-9]+)([a-z]+)?
    

    【讨论】:

    • 那很快。看起来值正在匹配,我将如何在 c# 中将每个组放入单独的变量中?
    • 这很好用。我正在使用 Regex.Split(myValue, "([A-Z]+)([0-9]+)([A-Z]*)") 拆分值。谢谢!
    【解决方案2】:

    您可以简单地遍历每一行并使用整个数字块作为分隔符来拆分它们。

    当您在用于识别分隔符的正则表达式中包含捕获组时,分隔符随后将包含在返回的数组中。

    string[] substrings = Regex.Split(originalString, @"([0-9]+)")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-19
      • 2011-06-18
      • 2011-10-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多