簡體   English   中英

使用正則表達式將字符串轉換為不同長度的元素數組

[英]Convert string to array of elements with different length using regex

我有一個像8305473100342301010102BE7552773845527738451ACAF3D6C8743EC3 0000659A0000000500F107000104FFB50F0C之類的字符串,但我需要解析每個元素的整個字符串或不同大小的字符串或元素的長度。 我想要的輸出可能如下所示,

Array[0]=83;
Array[1]=05; 
Array[2]=4731003423; 
Array[3]=01; 
Array[4]=01; 
Array[5]=01; 
Array[6]=02; 
Array[7]=BE75; 
Array[8]=52773845; 
Array[9]=52773845; 
Array[10]=1ACAF3D6; 
Array[11]=C8743EC3; 
Array[12]=0000659A; 
Array[13]=00000005; 
Array[14]=00F1; 
Array[15]=07; 
Array[16]=00; 
Array[17]=0104; 
Array[18]=FFB5; 
Array[19]=0F; 
Array[20]=0C;

使用\\S+作為正則表達式。

  • \\S匹配一個非空格字符。
  • X+匹配多個x

這是 Javascript 示例:

> '83 05 4731003423 01 01 01 02 BE75 52773845 52773845 1ACAF3D6 C8743EC3 0000659A 00000005 00F1 07 00 0104 FFB5 0F 0C'.match(/\S+/g)
["83", "05", "4731003423", "01", "01", "01", "02", "BE75", "52773845", "52773845", "1ACAF3D6", "C8743EC3", "0000659A", "00000005", "00F1", "07", "00", "0104", "FFB5", "0F", "0C"]
> '83 AB 0C'.match(/\S+/g)
["83", "AB", "0C"]

> var dynamic_string = '83' + ' ' + 'AAAAAA' + ' ' + 'BEEF';
> dynamic_string.match(/\S+/g)
["83", "AAAAAA", "BEEF"]

更新

使用捕獲組:

> var str = '83 05473100342301010102BE7552773845527738451ACAF3D6C8743EC3 0000659A0000000500F107000104FFB50F0C';
> str = str.replace(/\s+/g, '');
> var arr = str.match(/(.{2})(.{2})(.{8})(.{2})(.{2})(.{2})(.{2})(.{4})(.{8})(.{8})(.{8})(.{8})(.{8})(.{8})(.{4})(.{2})(.{2})(.{4})(.{4})(.{2})(.{2})(.{2})/);
"8305473100342301010102BE7552773845527738451ACAF3D6C8743EC3 0000659A0000000500F107000104FFB50F0C"
> arr
["8305473100342301010102BE7552773845527738451ACAF3D6C8743EC3 0000659A0000000500F107000104FFB50", "83", "05", "47310034", "23", "01", "01", "01", "02BE", "75527738", "45527738", "451ACAF3", "D6C8743E", "C3 00006", "59A00000", "0050", "0F", "10", "7000", "104F", "FB", "50", "0C"]
> arr.slice(1)
["83", "05", "47310034", "23", "01", "01", "01", "02BE", "75527738", "45527738", "451ACAF3", "D6C8743E", "C3 00006", "59A00000", "0050", "0F", "10", "7000", "104F", "FB", "50", "0C"]

順便說一句,正則表達式似乎不是這項任務的最佳工具。

例如,在 Python 中,你可以不用正則表達式來做同樣的事情:

>>> import struct
>>> s = '83 05473100342301010102BE7552773845527738451ACAF3D6C8743EC3 0000659A0000000500F107000104FFB50F0C'
>>> struct.unpack('2s2s8s2s2s2s2s4s8s8s8s8s8s8s4s2s2s4s4s2s2s2s2s', s)
('83', ' 0', '54731003', '42', '30', '10', '10', '102B', 'E7552773', '84552773', '8451ACAF', '3D6C8743', 'EC3 0000', '659A0000', '0005', '00', 'F1', '0700', '0104', 'FF', 'B5', '0F', '0C')

Javascript 中的另一種方式,sans regex,是使用 Javascript split

"83 05 4731003423 01 01 01 02 BE75 52773845 52773845 1ACAF3D6 C8743EC3 0000659A 00000005 00F1 07 00 0104 FFB5 0F 0C".split(" ");
// returns ["83", "05", "4731003423", "01", "01", "01", "02", "BE75", "52773845", "52773845", "1ACAF3D6", "C8743EC3", "0000659A", "00000005", "00F1", "07", "00", "0104", "FFB5", "0F", "0C"]

string.split(' '); 會給你那個確切的數組

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM