我有以下字符串:connect_2014-06-03.csv
和以下正则表达式:(S+)[_-]
。
我想做的是只提取第一个单词,即connect
从字符串,但由于某种原因,正则表达式匹配connect_2014-06-
。我试图通过做(S+)[_-]?
使它不贪婪,但这似乎不起作用。
有人知道吗?
这是+
是贪婪的,而不是整个正则表达式。您需要修改捕获组中的S+
,使其不那么贪婪。
(S+?)[_-]
请参阅此regex101。
也许不使用任何非空白字符是有意义的,而只是使用([a-z]+)_
?请记住,破折号和下划线也不是空格。
您可以使用BASH字符串操作来代替正则表达式:
s='connect_2014-06-03.csv'
echo "${s%%_*}"
connect
使用正则表达式可以使用:
[[ "$s" =~ ^([^_]+) ]] && echo "${BASH_REMATCH[1]}"
connect
有两个简单的解决方案。
您可以通过在量词中添加?
来显式地声明您想要非贪婪。
(S+?)[_-]
或者你可以让你的字符类限制自己:
([^_-s]*)