我有一些文字
1 fgj sel dfjkd prm jfkdl frm jkl tbl klk
2 ledk prm jkl jkk frm jkl tbl jkl fjj
3 jklj sel prm kljlk jkjkl jkkl tbl emel
4 rui jkljl sel jklj jklj prm jkjl
5 jljkj frm jkljl jlj tbl mjljlk
我需要以“sel”开头并以“tbl”结尾的 block 。该 block 包含两个单词“prm”和“frm”。 也就是说,该 block 由单词序列“sel”“prm”“frm”“tbl”组成 正确答案应该是(第一行的一部分,第四行和第五行的一部分)
sel dfjkd prm jfkdl frm jkl tbl
sel jklj jklj prm jkjl
5 jljkj frm jkljl jlj tbl
我尝试过,但它对我不起作用
(sel)*?(prm|frm)?*(tbl)
大概
\bsel\b.*?\bprm\b.*?\bfrm\b.*?\btbl\b
最佳答案
您需要使用两个正向前瞻 tempered ungreedy dot在查找 prm
和 frm
时在内部放置边界。此边界是到达 tbl
字符串时的边界。尝试:
(?s)sel(?=((?!tbl).)*?prm)(?=(?1)*?frm)(?1)*tbl
关于regex - 搜索包含两个单词的 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54167820/