我有一个python代码,例如看起来像
class Foo(Bar, Baz, Jazz):
pass
或
class Foo(Baz, Bar, Jazz):
pass
class Foo(Baz, Jazz, Bar):
pass
我需要从继承层次结构中的父项列表中删除Bar
。
因此,我们的想法是删除Bar
左侧的可选,
或右侧的(不包括)。
我试图用sed。
做到这一点echo 'class Foo(Baz, Bar, Jazz):' | sed -r 's/(class .*\(.*)([, ]*Bar[, ]*)/\1/'
给出正确的结果
class Foo(Baz, Jazz):
答案 0 :(得分:1)
如果我理解正确,那么sed
应该按照您的预期进行。
sed -r '/^\s*class.*:\s*$/s/(,\s*Bar\s*|\s*Bar\s*,\s*)//g' file
输出:
class Foo(Baz, Jazz):
pass
class Foo(Baz, Jazz):
pass
答案 1 :(得分:0)
While not Browser("ABC").Page("PQR").Frame("XYZ").Image("BatchSuccess").Exist
Wait 1
Browser("ABC").Sync
Wend
'your code here after object A is synchronized
Browser("ABC").Page("PQR").Frame("XYZ").Image("BatchSuccess").Click
您可以(class .*?\(.*?)(?:[\s,]+Bar\s*|\s*Bar[\s,]+)
使用此。替换。请参阅演示。
https://regex101.com/r/zJ7vZ4/2
\1
答案 2 :(得分:0)
您可以指定多个表达式以满足不同的条件,如下所示:
$ cat a.py
class Foo(Baz, Bar, Jazz):
pass
class Foo(Baz, Jazz, Bar):
pass
class Foo(Bar, Baz, Jazz):
pass
$ sed -r -e '/^\s*class.*,\s*Bar\s*,.*$/s/,\s*Bar\s*,/,/g' -e '/^\s*class.*,\s*Bar\s*\).*$/s/,\s*Bar\s*\)/)/g' -e '/^\s*class.*\(\s*Bar\s*,\s*.*$/s/\(\s*Bar\s*,\s*/(/g' a.py
class Foo(Baz, Jazz):
pass
class Foo(Baz, Jazz):
pass
class Foo(Baz, Jazz):
pass
$
正则表达式还检查它应该在python中满足class
声明的行上执行替换,因此它不会触及任何其他行(例如:离开import
原样)。