在Python中用正则表达式替换括号

时间:2019-06-11 13:24:57

标签: python regex replace

我正在尝试将数字或单个字母(1),(a)周围的括号替换为1.和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.

3 个答案:

答案 0 :(得分:0)

result = re.sub(r'\(([0-9a-z])\)', r'\1. ', text)

答案 1 :(得分:0)

实际上,您正在删除带有点和八进制代码为(的char的任何)\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个或多个字母
  • \)-一个)字符。

答案 2 :(得分:-1)

我已经听完了您所有的答案并与他们一起玩。我认为这可能会帮助其他人。我总是与正则表达式斗争! Wiktor Stribitriew向我指出了正确的方向。


# 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)