在Python3.x中替换字符串中的转义序列字符
我使用以下代码替换字符串中的转义字符。我首先使用在Python3.x中替换字符串中的转义序列字符,python,regex,replace,Python,Regex,Replace,我使用以下代码替换字符串中的转义字符。我首先使用\n和使用的re.sub()进行了拆分,但我仍然不知道我缺少了什么,代码没有按照预期工作。我是Python的新手,所以请不要判断是否存在优化问题。这是我的代码: #import sys import re String = "1\r\r\t\r\n2\r\r\n3\r\r\r\r\n\r\n\r4\n\r" splitString = String.split('\n') replacedStrings = [] i=0 for oneStri
\n
和使用的re.sub()
进行了拆分,但我仍然不知道我缺少了什么,代码没有按照预期工作。我是Python的新手,所以请不要判断是否存在优化问题。这是我的代码:
#import sys
import re
String = "1\r\r\t\r\n2\r\r\n3\r\r\r\r\n\r\n\r4\n\r"
splitString = String.split('\n')
replacedStrings = []
i=0
for oneString in splitString:
#oneString = oneString.replace(r'^(.?)*(\\[^n])+(.?)*$', "")
oneString = re.sub(r'^(.?)*(\\[^n])+(.?)*$', "", oneString)
print(oneString)
replacedStrings.insert(i, oneString)
i += 1
print(replacedStrings)
我的目标是:我只需要值(不需要转义序列)作为分割字符串
我的方法是:
\n
,这将为我提供单独字符串的数组列表1
2
3
4
['1\r\r\t\r', '2\r\r', '3\r\r\r\r', '\r', '\r4', '\r']
您可能会发现在这里使用简单的模式
\S+
更容易使用re.findall
:
input = "1\r\r\t\r\n2\r\r\n3\r\r\r\r\n\r\n\r4\n\r"
output = re.findall(r'\S+', input)
print(output)
['1', '2', '3', '4']
这种方法将隔离和匹配一个或多个非空白字符的孤岛
编辑:
根据您的新输入数据,我们可以尝试匹配模式[^\r\n\t]+
:
input = "jkahdjkah \r\r\t\r\nA: B\r\r\nA : B\r\r\r\r\n\r\n\r4\n\r"
output = re.findall(r'[^\r\n\t]+', input)
print(output)
['jkahdjkah ', 'A: B', 'A : B', '4']
re.sub
并不是这里工作的合适工具。表格上的内容是split
或re.findall
,因为您希望重复匹配/隔离文本的某一部分re.sub
用于获取字符串并将其转换为其他内容。它可以用来提取文本,但对于多个匹配项来说效果不太好。您就快到了,我将使用string.strip()
替换字符串开头和结尾的多个\r
和\n
String = "1\r\r\t\r\n2\r\r\n3\r\r\r\r\n\r\n\r4\n\r"
splitString = String.split('\n')
replacedStrings = []
i=0
for oneString in splitString:
s = oneString.strip()
if s != '':
print(s)
replacedStrings.append(s)
print(replacedStrings)
输出将如下所示
1
2
3
4
['1', '2', '3', '4']
对于
“jkahdjkah\r\r\t\r\nA:B\r\r\nA:B\r\r\n\r\n\r\4\n\r”
,输出将是['jkahdjkah',A:B',A:B',4']
我又找到了一种方法,这似乎很好,它可能没有其他答案那么优化,但这只是另一种方式:
import re
splitString = []
String = "jhgdf\r\r\t\r\nA : B\r\r\nA : B\r\r\r\r\n\r\n\rA: B\n\r"
splitString = re.compile('[\r\t\n]+').split(String)
if "" in splitString:
splitString.remove("")
print(splitString)
我在这里添加了它,以便与我一样经历同样麻烦的人可能也希望忽略这种方法
以下是我使用上述代码后得到的输出:
['jhgdf', 'A : B', 'A : B', 'A: B']
这对于This input
“jkahdjkah\r\t\r\nA:B\r\r\nA:B\r\r\n\r\n\r\n\r”
,其中输出应该给我['jkahdjkah','A:B','A:B',4]
,而输出是['jkahdjkah','A:','B','A','A','A','A','A','B','A','A','B','4']
@code\u然后匹配,问:我的最新答案。这真的很酷,但我的疑问仍然存在,re.sub()
,这有什么问题,为什么不起作用,请您在回答中对此添加一些解释?我有一个问题,您的代码工作得很好,但为什么re.sub
不起作用?可能是因为替换字符串不正确!在国际海事组织,更换是不必要的strip
做了你需要的一切。那么,我能用什么替代字符串来让代码工作呢?@code\u Ninja:我只是想解释一下为什么你的sub
不能像你期望的那样工作。在执行sub
时,您在正则表达式中使用了start^
和end$
锚点,如果匹配,则将匹配整个字符串,然后整个字符串将被替换为空字符串,这不是您想要的。相反,您应该使用oneString=re.sub(r'[\r\t]+','',oneString)
来正确替换字符串中的所有\r
和\t
,并为您提供正确的输出。虽然我不完全理解您的regexp试图实现的目标,我看到一个主要缺陷:您试图逐字匹配`而String`不包含任何内容。字符串中的`in`仅用于转义,它们不在那里!哎呀。注释格式问题<代码>\`while
String。。。字符串中的
\`。。。也不行吗?如何在代码引用中加反斜杠。。。字符串中的反斜杠…字符串中的反斜杠…@mkiever不知道,我两种方法都试过了,这似乎是SO可能想解决的问题。