Python转义re.split将反斜杠+符号视为另一个符号

2024-04-26 07:32:40 发布

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

我有一个输入字符串,它以某种方式提醒html代码,但是标记使用方括号而不是角括号

输入字符串为: str = r'Lorem ipsum [dolor] sit amet' 我处理它与重新分裂使用模式 ptr = r'\[.*?\]' 检测标签。结果是一个列表 list = [r'Lorem ipsum ', r'[dolor]', r' sit amet'] 问题是两个符号序列\[应该表示[符号,而不是开始标记

re.split(r'\[.*?\]', r'Lorem \[ipsum\] \\[dolor] sit amet') 给予 [r'Lorem \', r'[ipsum\]', r' \\', r'[dolor]', r' sit amet'] 当我想 [r'Lorem ipsum \[dolor\] \\', r'[dolor]', r' sit amet']

所以我想理解的是,如何说,重新分割两个符号序列\x是和转义序列,应该被视为一个符号


Tags: 字符串代码标记html方式符号序列括号
3条回答

我猜我们可能想把字符串分成三部分,因为我们可以使用三个捕获组来收集我们想要输出的内容,可能类似于:

(.+?\\\\)(\[.+\])(.+)

测试

# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility

import re

regex = r"(.+?\\\\)(\[.+\])(.+)"

test_str = "Lorem \\[ipsum\\] \\\\[dolor] sit amet"

subst = ""

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

if result:
    print (result)

# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.

Demo

enter image description here

你可以用

re.findall(r'(?:[^][\\]|\\.)+|\[[^][]*]', s)

参见regex demo及其图表:

enter image description here

简而言之:

  • (?:[^][\\]|\\.)+-除了][\或任何字符(如果未指定re.DOTALL标志,则为换行字符)之外的任何字符的一个或多个序列用反斜杠转义
  • |-或
  • \[[^][]*]-a[,然后是除[]之外的任何0+字符,然后是]

Python demo

import re
rx = r"(?:[^][\\]|\\.)+|\[[^][]*]"
s = r"Lorem \[ipsum\] \\[dolor] sit amet"
results = re.findall(r'(?:[^][\\]|\\.)+|\[[^][]*]', s)
for result in results:
    print("'{}'".format(result))

输出:

'Lorem \[ipsum\] \\'
'[dolor]'
' sit amet'

r放在字符串前面的目的是将其视为原始字符串->;Python将反斜杠视为文字字符。你应该用普通的字符串

相关问题 更多 >