如何使用正则表达式搜索带括号的字符串?

How to search a string with parentheses using regular expression?

我有一个包含以下字符串的 txt 文件:

   A 123
   B  456
   Ab(123)
   ......

我想在 txt 文件中搜索 Ab(123)

我尝试过的:

re.search(r'Ab(123)',string)

有12个特殊含义的字符,你在前面加\转义到它的字面意思。

re.search(r'Ab\(123\)',string)

# or re.findall(r'Ab\(123\)',string)

查看 https://regex101.com/r/1bb8oz/1 了解详细信息。

Ab\(123\)

在正则表达式中,有 12 个具有特殊含义的字符:反斜杠 \、插入符 ^、美元符号 $、句点或点 . 、竖线或管道符号 |、问号 ?、星号或星号 *、加号 +、左括号 (、右括号 )、左方括号 [ 和左大括号 {,这些特殊字符通常称为 metacharacters,应该用反斜杠转义 Ab\(123\) 如果用作文字。
这可以自动使用re.escape()

实现
import re
string = "some text Ab(123) and more text"
if re.search(re.escape("Ab(123)"),string):
  print("match")

如果您的目标只是提取带有括号的行,您首先真的需要正则表达式吗?

您可以使用以下方法:

输入:

$ cat parentheses.txt 
A 123
B  456
Ab(123)
uV(a5afgsg3)
A 123

输出:

$ python parentheses.py 
['Ab(123)', 'uV(a5afgsg3)']

代码:

with open('parentheses.txt') as f:
    content = f.readlines()
content = [x.strip() for x in content if '(' in x and ')' in x]
print(content)

如果你真的想使用正则表达式:

import re

s = """
A 123
B  456
Ab(123)
uV(a5afgsg3)
A 123
"""
print(re.findall(r'^.*?\(.*?\).*$',s,re.MULTILINE))

输出:

['Ab(123)', 'uV(a5afgsg3)']

演示: https://regex101.com/r/PGsguA/1