在Python中用regex替换圆括号

2024-09-28 21:34:57 发布

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

我试图用1替换数字或单个字母(1)、(a)周围的括号。和2。我想保留较长的单词(reprehenderit)

这就是我尝试过的。当我只想让句号出现一次时,所有前括号的两边都会出现句号。你知道吗

谢谢


import re

text = '''Lorem ipsum dolor sit amet,\n\n(1)consectetur adipiscing elit, sed do eiusmod tempor incididunt\n\n(2)ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip\n\n(a) ex ea (commodo consequat). Duis aute irure dolor in (reprehenderit) in voluptate velit esse cillum dolore eu\n\n(b) fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'''

result = re.sub(r'[\(\)]','.\1', text)

Print(result)

我得到的是:

Lorem ipsum dolor sit amet,

.1. consectetur adipiscing elit, sed do eiusmod tempor incididunt

.2. ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip

.a. ex ea .commodo consequat.. Duis aute irure dolor in .reprehenderit. in voluptate velit esse cillum dolore eu

.b. fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

我正在寻找:

Lorem ipsum dolor sit amet,

1. consectetur adipiscing elit, sed do eiusmod tempor incididunt
2. ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
    a. ex ea (commodo consequat). Duis aute irure dolor in (reprehenderit) in voluptate velit esse cillum dolore eu
    b. fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.


Tags: indosedipsumloremutdoloramet
3条回答

实际上,您正在删除任何带有点的(),以及带有八进制代码\001的字符。你知道吗

如果要用一个字母或数字替换行开头的(...),请使用

result = re.sub(r'^\(([\da-z])\)', r'\1. ', text, flags=re.M)

this regex demo。注意^的使用,它只允许在行的开头进行匹配(它与flags=re.M标志一起工作)。你知道吗

要在有1+个数字字母时删除,请使用

result = re.sub(r'^\((\d+|[a-z]+)\)', r'\1. ', text, flags=re.M)

参见regex demo。在这里

  • ^-匹配行首
  • \(-(字符
  • (\d+|[a-z]+)-1个或多个数字或1个或多个字母
  • \)-a)字符。你知道吗

我把你所有的答案都记下来了。我想这可能会帮助别人。我总是和正则表达式斗争!!维克托·斯特里比厄给我指出了正确的方向。你知道吗


# find all (1), (2) and replace with 1., 2.
re.sub(r'\(([\d])\)', r'\1.  ', text)

# find all (a), (b) and replace with a., b.
re.sub(r'\(([\(a-z)])\)', r'\1.  ', text)

# find both (1), (2), (a), (b) and replace with 1., 2., a., b.
re.sub(r'\(([\da-z])\)', r'\1. ', text)
result = re.sub(r'\(([0-9a-z])\)', r'\1. ', text)

相关问题 更多 >