我有一个关于如何在 Python 中将换行符表示为字符串的问题。我想我可以使用内置函数repr来实现这一点。所以我尝试通过运行以下代码来验证这种方法的可行性:
repr
import os lineBreakAsStr = repr(os.linesep) print(f'lineBreakAsStr = {lineBreakAsStr}') # line 4 print(lineBreakAsStr == '\\r\\n') # line 5
repr如果函数可以成功地将值转换为os.linesep字符串,我希望第 5 行的结果应该是“True” 。但在我的 Windows 7 PC 中,第 4 行的输出是“lineBreakAsStr = ‘\r\n’”,第 5 行的输出是“False”。
os.linesep
谁能向我解释为什么?我应该如何从值中获取代表换行符的字符串os.linesep并将其放入正则表达式模式中,而不是使用像’\r\n’这样的固定字符串?
下面是一个代码片段来演示我想要做什么。(相对于第14行的代码,我更喜欢使用第13行的代码。但是第13行的代码不起作用。必须以某种方式对其进行修改才能找到我要查找的子字符串。):
import os, re def f(pattern, data): p = re.compile(pattern) m = p.search(data) if m is not None: print(m.group()) else: print('Not match.') dataSniffedInConsole = ('procd: - init -\\\\r\\\\nPlease press Enter ' 'to activate this console.\\\\r\\\\n') lineBreakAsStr = repr(os.linesep) # line 13 # lineBreakAsStr = '\\\\\\\\r\\\\\\\\n' # line 14 pattern = rf'Please press Enter to activate this console.{lineBreakAsStr}' f(pattern, dataSniffedInConsole)
使用repr将在字符串周围加上引号。引号可能导致您的问题。
>>> newline = repr(os.linesep) >>> print(newline) '\\r\\n' >>> newline == "'\\r\\n'" True
快速解决您的问题是删除引号:
>>> newline = repr(os.linesep).strip("'") >>> print(newline) \\r\\n >>> newline == "'\\r\\n'" False >>> newline == "\\r\\n" True
我建议您找到一种从控制台读取原始数据而不是表示的方法。使用原始数据将更容易处理。