RegEX字符串到特定长度

时间:2015-02-09 18:00:22

标签: regex vb.net parsing split

嘿所有我在RegEX都很糟糕,所以我发布这个问题,希望RegEX Guru能够轻松地知道并分享答案。

我有以下字符串类型:

508815  AYBK1619RAUEZP
AWBZ4222TYBE1207CWSWER
DEFAULT EP1     O25R60

我需要这种格式(拆分):

508815   AYBK1619  RAU EZP
AWBZ4222 TYBE1207  CWS WER
DEFAULT  EP1       O25 R60

所以:     xxxxxxxx xxxxxxxx xxx xxx

  • 字符串
  • 中的前8个字符
  • 下一个字符串
  • 中的8个字符
  • 接下来的3个字符串
  • 字符串
  • 中的最后3个字符

我可以做Mid(x,x)以及所有这些,但我认为使用RegEX会更快更清晰的代码。

任何帮助都会很棒!谢谢!

2 个答案:

答案 0 :(得分:2)

如果您希望实际使用正则表达式在这些位置进行拆分,则可以使用以下内容:

Dim s As String = "508815  AYBK1619RAUEZP"
Dim m() As String = Regex.Split(s, "(?<=^.{8})|(?<=^.{16})|(?<=^.{19})")
Console.WriteLine(String.Join(" ", m)) '=> "508815   AYBK1619 RAU EZP"

你也可以匹配那些位置的子串而不是split ting ...

Dim s As String = "AWBZ4222TYBE1207CWSWER"
Dim m As Match = Regex.Match(s, "^(.{8})(.{8})(.{3})(.{3})$")
If m.Success Then
   Console.WriteLine(
          String.Join(" ", 
                      m.Groups(1).Value,
                      m.Groups(2).Value,
                      m.Groups(3).Value,
                      m.Groups(4).Value
                     ))
End If

'**Output => "AWBZ4222 TYBE1207 CWS WER"

答案 1 :(得分:1)

您可以使用以下正则表达式来获取所需内容:

^(\w{0,8})\s*(\w+)\s*(\w{3})(\w{3})$

这个正则表达式将:

  1. 匹配字符串开头的0到8个字符
  2. 后跟0个或更多空格
  3. 后跟一个或多个单词字符
  4. 后跟0个或更多空格
  5. 后跟3个字符
  6. 后跟3个字符
  7. 字符串结尾
  8. 单词字符(\w)是任何字母数字字符,加上下划线字符。例如,如果您只想要大写字母,则可以使用\w

    [A-Z]替换为字符类A-Z(A-Z范围内的任何字母)

    See example