我有一个像prefix-2020.80-suffix-1
这样的字符串
以下是输入字符串
"2020.80-suffix-1"
"2020.80-suffix"
"prefix-2020.80"
"prefix-2020.80-1"
我需要剪切并将 2020
分配给变量,但无法获得所需的输出
这是我到目前为止所得到的......
set var=`echo "prefix-2020.80-suffix-1" | sed "s/[[:alnum:]]*-*\([0-9]*\).*/\1/"`
我的正则表达式不适用于其他情况,我无法弄清楚原因!它比python的regexp语法更复杂
答案 0 :(得分:1)
这适用于您输入的所有内容
sed 's/.*\(^\|-\)\([0-9]*\)\..*/\2/' test
匹配行的开头或一切到-[number].
并捕获数字。
您使用的原始版本的问题是,如果没有前缀,则没有考虑到这一点。
答案 1 :(得分:0)
您可以使用此 IEnumerator enumerator =
((System.Collections.IEnumerable)(collection)).GetEnumerator();
try {
while (enumerator.MoveNext()) {
...
:
grep -oP
答案 2 :(得分:0)
使用sed(扩展正则表达式):
echo "prefix-2020.80-suffix-1" |sed -r 's/^([^-]*-|)([0-9]+).*/\2/'
使用grep
:
echo "prefix-2020.80-suffix-1" |grep -oP "^([^-]*-|)\K\d+"
2020
-P
适用于Perl正则表达式。