正则表达式匹配一行,但不包括outpu中的字符串

2024-04-19 22:59:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试解析SQL查询连接条件。我需要提取包含(+)的行,并基于extract对其进行分组。我使用的是python3.6

下面是我的测试字符串:

  1.  a.deptno = b.dept_no(+)
  2.  c.deptno(+)=b.dept_no
  3.  a.deptno(+)= 900

First : I need to extract lines which has (+) second : Need to extract the alias for example

1. a , b
2. c , b
3. a

到目前为止,我一直在尝试regex

使用([\w_]+).*?([\w_]+)\(\+\)我可以提取第一组,但第二组似乎有一些问题。你知道吗

任何建议都会很有帮助


Tags: tono字符串whichsqlextractneed条件
2条回答

您可以使用positive lookahead(?=断言字符串包含(+)。你知道吗

然后你就可以在一个捕获组中匹配你的值。你知道吗

^{}

匹配:

  • ^行的开始
  • (?=.*\(\+\))断言后面包含(+)的正向前瞻
  • (\w+)\.在一个组中捕获一个或多个单词字符(组1),后跟一个点
  • [^=]+一次或多次不匹配=号
  • =\s*匹配一个=符号,然后再匹配零个或多个空格字符
  • (?:非捕获组
    • (\w+)\.在一个组中捕获一个或多个单词字符(组2),后跟一个点
  • )?关闭非捕获组并使其成为可选的
  • .*$匹配任何字符零次或多次,直到行尾$
pattern = r'([a-z]+)\.[a-z]+\_?[a-z]+\(\+\)'

In [24]: s  = 'a.deptno = b.dept_no(+)'
In [25]: re.search(pattern, s).group(1)
Out[25]: 'b'

In [26]: s = "c.deptno(+)=b.dept_no"
In [27]: re.search(pattern, s).group(1)
Out[27]: 'c'

In [28]: s = "a.deptno(+)= 900"
In [29]: re.search(pattern, s).group(1)
Out[29]: 'a'

希望这有帮助。你知道吗

相关问题 更多 >