如何在python中使用regex从多行字符串中删除特定字符

2024-09-30 20:16:42 发布

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

我有一个多行字符串,如下所示:

st = '''emp:firstinfo\n
       :secondinfo\n
       thirdinfo
     '''
print(st)

我要做的是跳过字符串中的第二个“:”,得到如下输出:

'''emp:firstinfo\n
   secondinfo\n
   thirdinfo
   '''

简单地说,如果它以“:”开头,我试图忽略它。你知道吗

以下是我所做的:

mat_obj = re.match(r'(.*)\n*([^:](.*))\n*(.*)' , st)
print(mat_obj.group())

很明显,我看不出我的错误,但谁能帮我告诉我哪里错了?你知道吗


Tags: 字符串reobjmatch错误groupstprint
3条回答

你可以用sub代替,只是不要捕捉不需要的部分。你知道吗

(.*\n)[^:]*:(.*\n)(.*)

enter image description here

替换为

\1\2\3

^{}


import re

regex = r"(.*\n)[^:]*:(.*\n)(.*)"

test_str = ("emp:firstinfo\\n\n"
    "       :secondinfo\\n\n"
    "       thirdinfo")

subst = "\\1\\2\\3"

# You can manually specify the number of replacements by changing the 4th argument
result = re.sub(regex, subst, test_str, 0, re.MULTILINE)
#import regex library

进口re

#remove character in a String and replace with empty string. 

text=“电影低俗小说于1994年上映” 结果=回复sub(r“[a-z]”,“”,文本) 打印(结果)

可以将re.sub与此正则表达式一起使用:

>>> print (re.sub(r'([^:\n]*:[^:\n]*\n)\s*:(.+)', r'\1\2', st))
emp:firstinfo
secondinfo

       thirdinfo

RegEx Demo

正则表达式详细信息:

  • (:启动第一个捕获组
    • [^:\n]*:匹配0个或更多不是:和换行符的字符
    • ::匹配冒号
    • [^:\n]*:匹配0个或更多不是:和换行符的字符
    • \n:匹配新行
  • ):结束第一个捕获组
  • \s*:匹配0个或更多的空白
  • ::匹配冒号
  • (.+):匹配第二个捕获组中的一个或多个字符(除了换行符)
  • \1\2:用于替换以放回组1和组2中捕获的子串。你知道吗

相关问题 更多 >