【发布时间】:2019-09-25 03:19:10
【问题描述】:
我正在尝试使用正则表达式 我有一个格式的字符串
[+/-] Added Feature 305105:WWE-108. Added Dolph Ziggler super star
让我们看看字符串的每个部分
1) [+/-] – bracket quotes are important. it can [+] or [-]. or [+/-]. not "+", or "-", or "+/-" without bracket quotes
2) Added – it can be "Added", "Resolved", "Closed"
3) 305105 – any numbers
4) Feature – it can be "Feaute", "Bug", "Fix"
5) : – very imporant delimiter
6) WWE-108 – any text with delimiter "–" and with numbers after delimiter
7) . – very imporant delimiter
8) Added Dolph Ziggler super star – any text
我想做什么
让我们尝试解决每个部分:
1)echo '[+]' | egrep -o "[+/-]+"。是的,它有效,但它也适用于[+/] 或[/]。我看到没有括号引号的结果
2)echo "Resolved" | egrep -o "Added$|Resolved$|Closed$"。它有效
3)echo '124214215215' | egrep -o "[0-9]+$"。它有效
4)echo "Feature" | egrep -o "Feature$|Bug$|Fix$"。它也有效
5)我还没有找到如何
6)echo "WWE-108" | egrep -o "[a-zA-Z]+-[0-9]+"。它也有效
7)我还没有找到如何
8) 任何文字
主要问题。根据此模板,如何通过带有空格的 bash 连接所有这些点。 [+/-] Added Feature 305105:WWE-108. Added Dolph Ziggler super star。我对正则表达式不熟悉,至于我,我想做这样的事情:
string="[+/-] Added Feature 305105:WWE-108. Added Dolph Ziggler super star"
first=$(echo $string | awk '{print $1}')
if [[ $first == "[+]" ]]; then
echo "ok"
echo $first
elif [[ $first == "[*]" ]]; then
echo "ok2"
echo $first
elif [[ $first == "[+/-]" ]]; then
echo "ok3"
echo "$first"
else
echo "not ok"
echo $first
exit 1
fi
但是这样不行。你能帮我在bash上创建正则表达式吗?另外,python对我来说也可以。
我为什么要这样做?我想以这样的格式制作预提交挂钩。
[+/-] Added Feature 305105:WWE-108. Added Dolph Ziggler super star。这是一个原因,我为什么要这样做。
【问题讨论】:
-
egrep '^\[(\+|-|\+/-)\] (Added|Resolved|Closed) (Feature|Bug|Fix) [0-9]+:[a-zA-Z]+-[0-9]+\..+'怎么样,使用扩展正则表达式的一般规则被认为是元字符.*+^$(|)[]{}必须用反斜杠转义以具有字面意义(除了在[]之间的字符集,其中规则是不同) -
@NahuelFouilleul 谢谢。作品
-
很高兴知道,评论已改为回答