我想返回指定起始字符串和结束字符串中的所有字符串
给定一个字符串libs = 'libr(lib1), libr(lib2), libr(lib3), req(reqlib), libra(nonlib)'
从上面的libs
字符串中,我想搜索介于libr(
和)
之间的字符串,或者介于req(
和)
之间的字符串
我想返回['lib1', 'lib2', 'lib3', 'reqlib']
import re
libs = 'libr(lib1), libr(lib2), libr(lib3), req(reqlib), libra(nonlib)'
pat1 = r'libr+\((.*?)\)'
pat2 = r'req+\((.*?)\)'
pat = f"{pat1}|{pat2}"
re.findall(pat, libs)
上面的代码当前返回[('lib1', ''), ('lib2', ''), ('lib3', ''), ('', 'reqlib')]
,我不确定应该如何修复它
我认为这样做的一种常见方法是在您想要捕获的模式之前的单词中使用交替:
请参阅联机demo
\b
-字边界李>(?:
-打开非捕获组:libr|req
-匹配“libr”或“req”李>)
-关闭非捕获组李>\(
-一个字面上的开场白李>(
-打开捕获组:[^)]+
-除了结束符之外,还要匹配1+个字符李>)
-关闭捕获组李>python演示:
印刷品:
您可以这样做:
它使用正的lookback
(?<=)
和正的lookahead(?=)
.*?
:选择中间的所有字符。我将它命名为“内容”(?<=libr\()
:“content”前面必须加libr(
(我们逃避(
)?(?=\))
:内容后面必须跟)
((
也转义)完整代码:
输出:
试试这个正则表达式
Click for Demo
Click for Code
说明:
(?:(?<=libr\()|(?<=req\())
(?<=libr\()
-与紧跟在文本前面的位置匹配的正向查找libr(
|
-或(?<=req\()
-与紧跟在文本前面的位置匹配的正向查找req(
[^)]+
-匹配非)
字符的1+次出现次数。因此,这将匹配所有内容,直到找到下一个)
相关问题 更多 >
编程相关推荐