我们正在处理一个包含整数,浮点数和字符的字符串。
示例:
.12A1.3B.5CD
我想把这个字符串转换成一个数字和字符数组,看起来像
[12中,A,1.3,B,0.5,C,0,d]
(如果字母前面没有数字,则假定为0)
我尝试了不同的正则表达式组合,并且无法像以下一样工作:
str.match(/[a-zA-Z]+?[0-9]*\.?[0-9]+/g)
但它给了我结果:
[" 12"," A"," 1"," 3"," B",& #34; 5"," CD"]
砍掉小数点而不是分开" D"到" 0,D"
同样期望的结果是[。12,A,1.3,B,.5,C,0,D]。
任何猜测?
答案 0 :(得分:4)
您可以替换丢失的零并匹配部分。稍后在检查数字或字符串后映射该值。
var string ='.12A1.3B.5CD',
array = string
.replace(/((^|[a-z])(?=\.))|([a-z](?=[a-z]))/gi, '$&0')
.match(/[.0-9]+|[a-z]/gi)
.map(v => v == +v ? +v : v);
console.log(array);

.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:3)
如果后面跟着另一个字母,则可以在每个字母后面添加一个零,然后在字母上分割:
var s = ".12A1.3B.5CD";
console.log(
s.replace(/([a-z])(?=[a-z])/gi, "$1"+"0").split(/([a-z])/i).filter(x => x != "")
)

答案 2 :(得分:1)
使用String.match()
,Array.reduce()
和isNaN()
函数:
var s = '.12A1.3B.5CD', prev,
result = s.match(/(\d*\.)?\d+|[a-zA-Z]/g).reduce(function(a, v){
v = +v || v;
if (a.length > 1 && +v !== v && isNaN(prev)) a.push(0);
a.push(v);
prev = v;
return a;
}, []);
console.log(result)
“速度”比较:
答案 3 :(得分:0)
这应该可以解决问题:
for i in range(6):
for j in range(i):
card = random.choice(deck)
deck.remove(card)
print (card)
然后使用javascript你应该在连续字母之间的数组中插入一个0。
查看正则表达式的好网站:https://regex101.com/r/vhnv2M/1