gpt4 book ai didi

regex - 仅使用未转义的定界符拆分字符串

转载 作者:行者123 更新时间:2023-11-29 09:46:39 25 4
gpt4 key购买 nike

我想用 , 作为分隔符来分割一个字符串。我的问题是在某些情况下输入可能包含逗号。更改定界符不是一个选项。我希望用户能够使用 \ 转义逗号,因此我只想在 , 上拆分 ,但不在 \, 上拆分 像这样:

str="1,10,100,1\,000,10\,000,100\,000"
while [[ ${#str} -gt 0 ]]; do
#Get index of delimiter
index=$(echo "$str" | grep -boP '(?<!\\),' | head -c 1)

#If index is empty, there is nothing to do
if [[ -z "$index" ]]; then
echo "$str"
break
fi

#Get the next string we're looking for
echo "$str" | cut -c1-$index
#Cut the original string
str=$(echo "$str" | cut -c$(($index+2))-${#str})
done

目前正在打印:

1
10
100
1\,000
10\,000
100\,000

但我希望它打印:

1
10
100
1,000
10,000
100,000

我现在可以使用 sed\, 替换为 , 但是整个解决方案对于相对简单的问题来说似乎相当庞大。有更好的方法吗?

最佳答案

试试这个:

$ str="1,10,100,1\,000,10\,000,100\,000"
$ sed 's/\([^\]\),/\1\n/g' <<< $str
1
10
100
1\,000
10\,000
100\,000

使用 bash 单行代码:

$ sed 's/\([^\]\),/\1\n/g' <<< $str | while read -r line; do echo "-> $line"; done
-> 1
-> 10
-> 100
-> 1\,000
-> 10\,000
-> 100\,000

根据@fedorqui 的评论,通过这种方式您可以避免打开子 shell。

while IFS= read -r line; do echo "-> $line"; done < <(sed 's/\([^\]\),/\1\n/g' <<< "$str")

关于regex - 仅使用未转义的定界符拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37270768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com