我正在试着提取字符串
Triax PFG Interface Boards: Inova: P/N 01-903510-02 and Unity plus: P/N 01-903510-03\r\n\r\nService
从以下方面:
\r\n\r\nSupersedes\r\nNone\r\n\r\nTriax PFG Interface Boards: Inova: P/N 01-903510-02 and Unity plus: P/N 01-903510-03\r\n\r\nService Serial Numbers:\r\nUS00000000-US99999999\r\n\r\n
使用正则表达式:
Supersedes:?[\\r\\n ]+[\w\-\s]+[\\r\\n ]+(.*)[\\r\\n ]+Serial Numbers?:?[ \\r\\n]+.*?
当我在regex101上试用它时,这与预期一样有效:
https://regex101.com/r/eHdhBV/1/
但当我在Python3.6中尝试这一点时,第一个匹配的组并不是我所期望的:
import re
result = re.search('Supersedes:?[\\r\\n ]+[\w\-\s]+[\\r\\n ]+(.*)[\\r\\n ]+Serial Numbers?:?[ \\r\\n]+.*?', '\r\n\r\nSupersedes\r\nNone\r\n\r\nTriax PFG Interface Boards: Inova: P/N 01-903510-02 and Unity plus: P/N 01-903510-03\r\n\r\nService Serial Numbers:\r\nUS00000000-US99999999\r\n\r\n', re.S|re.M)
result[1]
'Boards: Inova: P/N 01-903510-02 and Unity plus: P/N 01-903510-03\r\n\r\nService'
为什么Python遗漏了“Triax PFG接口”?你知道吗
编辑:
正如我所建议的,我也尝试了使用字符串文字。结果如下:
rx = r'Supersedes:?[\\r\\n ]+[\w\-\s]+[\\r\\n ]+(.*)[\\r\\n ]+Serial Numbers?:?[ \\r\\n]+.*?'
result = re.search(rx, '\r\n\r\nSupersedes\r\nNone\r\n\r\nTriax PFG Interface Boards: Inova: P/N 01-903510-02 and Unity plus: P/N 01-903510-03\r\n\r\nService Serial Numbers:\r\nUS00000000-US99999999\r\n\r\n', re.S|re.M)
result[1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object is not subscriptable
您在联机测试仪上测试的是字符串文本,而您应该测试的是文本字符串。你知道吗
那个
是字符串文本,其中的
\r
和\n
是转义序列,由Python字符串引擎分别更改为CR和LF符号。你知道吗字符串文本表示以下文本字符串:
开头和结尾有两行空行。见the actual regex demo online。你知道吗
你可以用
参见Python demo
细节
Supersedes:?
-Supersedes:
或Supersedes
子串\s+
-1+空格(包括垂直空格,即换行符)[\w -]+
-1+字、空格和/或连字符\s+
-1+空格(.*)
-任何0+个字符(由于re.S
标志,也包括换行符)尽可能多(如果需要多于1个匹配项,则将*
替换为*?
以使其匹配尽可能少的字符)\s
-空白Serial Number
-一个Serial Number
子串。你知道吗相关问题 更多 >
编程相关推荐