特定长度的 RegEX 字符串

RegEX string to specific lengths

嘿,我在 RegEX 方面很糟糕,所以我发布了这个问题,希望 RegEX 大师能够轻松知道并分享答案。

我有以下字符串类型:

508815  AYBK1619RAUEZP
AWBZ4222TYBE1207CWSWER
DEFAULT EP1     O25R60

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

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

所以: xxxxxxxx xxxxxxxx xxx xxx

我可以执行 Mid(x,x) 和所有这些操作,但我认为使用 RegEX 会使代码更快更简洁。

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

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

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

此正则表达式将:

  1. 匹配字符串开头的0到8个单词字符
  2. 后跟 0 个或更多空格
  3. 后跟1个或多个单词字符
  4. 后跟 0 个或更多空格
  5. 后接3个字
  6. 后接3个字
  7. 字符串结束

单词字符 (\w) 是任何字母数字字符加上下划线字符。例如,如果您严格只想要大写字母,则可以使用 [A-Z]

\w 替换为 A-Z 的字符 class(A-Z 范围内的任何字母)

See example

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

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"

您也可以 匹配 这些位置的子字符串,而不是 splitting ...

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"