ksh风格的左右字符串剥离到匹配的表达式?

mat*_*ick 5 python regex string ksh

如何将字符串中的左边部分和右边部分剥离到匹配表达式,就像在ksh中一样?

例如:

${name##*/}

${name%/*}
Run Code Online (Sandbox Code Playgroud)

(有关ksh示例,请参阅http://www.well.ox.ac.uk/~johnb/comp/unix/ksh.html).

我似乎无法弄清楚使用re模块或字符串模块这样做的简单方法,但我必须遗漏一些东西.

Pau*_*ce. 3

克什:

\n\n
$ s=\'abc/def/ghi\'\n$ echo ${s%%/*}\nabc\n$ echo ${s%/*}\nabc/def\n$ echo ${s#*/}\ndef/ghi\n$ echo ${s##*/}\nghi\n
Run Code Online (Sandbox Code Playgroud)\n\n

Python:

\n\n
>>> s=\'abc/def/ghi\'\n>>> print s[:s.find("/")]\nabc\n>>> print s[:s.rfind("/")]\nabc/def\n>>> print s[s.find("/")+1:]\ndef/ghi\n>>> print s[s.rfind("/")+1:]\nghi\n
Run Code Online (Sandbox Code Playgroud)\n\n

编辑:

\n\n

要处理模式丢失的情况,如\xce\xa4\xce\x96\xce\xa9\xce\xa4\xce\x96\xce\x99\xce\x9f\xce\xa5 所指出的:

\n\n
>>> s=\'abc/def/ghi\'\n>>> t=\'no slash here\'\n>>> print s[:s.find("/") % (len(s) + 1)]\nabc\n>>> print t[:t.find("/") % (len(t) + 1)]\nno slash here\n>>> print s[:s.rfind("/") % (len(s) + 1)]\nabc/def\n>>> print t[:t.rfind("/") % (len(t) + 1)]\nno slash here\n>>> print s[s.find("/")+1:]\ndef/ghi\n>>> print t[t.find("/")+1:]\nno slash here\n>>> print s[s.rfind("/")+1:]\nghi\n>>> print t[t.rfind("/")+1:]\nno slash here\n
Run Code Online (Sandbox Code Playgroud)\n