我们将来自 REST API 调用的数据存储在输出文件中,如下所示:
示例输入文件:
test test123 - test (bla bla1 (On chutti))
test test123 bla12 teeee (Rinku Singh)
balle balle (testagain) (Rohit Sharma)
test test123 test1111 test45345 (Surya) (Virat kohli (Lagaan))
testagain blae kaun hai ye banda (Ranbir kapoor (Lagaan), Milkha Singh (On chutti) (Lagaan))
预期输出:内部突出显示
**
test test123 - test (**bla bla1** (On chutti))
test test123 bla12 teeee (**Rinku Singh**)
balle balle (testagain) (**Rohit Sharma**)
test test123 test1111 test45345 (Surya) (**Virat kohli** (Lagaan))
testagain blae kaun hai ye banda (**Ranbir kapoor** (Lagaan), **Milkha Singh** (On chutti) (Lagaan))
得出预期输出的条件:
test test123 - test (bla bla1 (On chutti))
最后一个括号从(bla
开始到chutti))
,所以我需要bla bla1
,因为它在内部(On chutti)
之前。因此,查找最后一个括号,然后在其中出现多少对括号,我们需要在它们之前获取数据,例如:在 testagain blae kaun hai ye banda (Ranbir kapoor (Lagaan), Milkha Singh (On chutti) (Lagaan))
行中需要的是 Ranbir kapoor
和 Milkha Singh
。尝试的正则表达式: 我尝试在正则表达式的工作演示上使用以下正则表达式:
正则表达式:
^(?:^[^(]+\([^)]+\) \(([^(]+)\([^)]+\)\))|[^(]+\(([^(]+)\([^)]+\),\s([^\(]+)\([^)]+\)\s\([^\)]+\)\)|(?:(?:.*?)\((.*?)\(.*?\)\))|(?:[^(]+\(([^)]+)\))$
我尝试过的正则表达式工作正常,但我想根据专家的建议即兴创作。
首选语言:主要偏好:Python,次要偏好:awk。寻找改进这个正则表达式或 python,awk 答案也可以。我自己也会尝试添加一个
awk
答案。
首先,以下是我如何使用任何 awk 找到每行最后一个
(...)
:
$ cat tst.awk
{
rec = $0
beg = 0
while ( match(rec, /\([^()]*)/) ) {
beg = RSTART
lgth = RLENGTH
rec = substr(rec,1,RSTART-1) RS substr(rec,RSTART+1,RLENGTH-2) RS substr(rec,RSTART+RLENGTH)
}
}
beg {
print substr($0,beg,lgth)
}
$ awk -f tst.awk file
(bla bla1 (On chutti))
(Rinku Singh)
(Rohit Sharma)
(Virat kohli (Lagaan))
(Ranbir kapoor (Lagaan), Milkha Singh (On chutti) (Lagaan))
从那里开始,只需找到那些本身没有包含在
(...)
中的字符串中的子字符串,将 **
放在它们周围,然后在 substr($0,1,beg-1)
之后打印它们。我可能会稍后添加那段代码,现在就运行。