提问人:kstats9pt3 提问时间:6/21/2023 最后编辑:Wiktor Stribiżewkstats9pt3 更新时间:6/21/2023 访问量:53
正则表达式检查字符串中的各种字符,后跟任意数字
regex check string for various characters followed by any number
问:
我正在扫描只有管道、逗号和波浪号分隔符的文件的标题行,并确保列名不以数字开头。
为了便于测试,我使用以下变量,将正则表达式模式放入其自己的变量中,然后创建“好”和“坏”标头字符串:
# check if header row has columns that start with numbers
regex="[|~,][[:digit:]]" /* pipe, tilde, or comma followed by any digit */
good_header="col1|col2|col3"
bad_header="col1|2col|col3"
我希望返回以下内容,因为没有以数字开头的列名:good
if [[ $good_header =~ $regex ]]; then
echo "good"
else
echo "bad"
fi
但是,它返回 .为什么会这样?逻辑有什么问题?bad
答:
0赞
l'L'l
6/21/2023
#1
它返回为坏的原因是您的正则表达式没有找到任何与条件匹配的实例,因此它的计算结果为 false。将逻辑切换为:$good_header
if [[ $good_header =~ $regex ]]; then
echo "bad"
else
echo "good"
fi
评论
0赞
Grok42
6/21/2023
或者你的正则表达式。regex="[|~,][^[:digit:]]" /* pipe, tilde, or comma not followed by any digit */
1赞
kstats9pt3
6/21/2023
漫长的一天,感谢您的澄清!
评论
"8col1|col2|col3"
"(^|[|~,])[[:digit:]]"
[[:digit:]]
\d
[|~,]
(^|[|~,])
^
|
\d
[[:digit:]]