我正在使用正则表达式从字符串中解析浮点数。
re.findall("[^a-zA-Z:][-+]?\d+[\.]?\d*", t)
这是我使用的代码。这段代码存在问题,如果数字与任何字符之间没有空格,它就无法解析该数字。例如,期望从“0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9”获得的输出应为[0,1,2,3,4,5,6,7,8,9],但它返回了“[|1,|2,|3,...]”。
有没有什么方法可以解决这种问题?
使用
re.findall(r"(?<![a-zA-Z:])[-+]?\d*\.?\d+", t)
(?<![a-zA-Z:])
- 负向后瞻,确保当前位置前面没有紧跟着ASCII字母或冒号[-+]?
- 一个可选的+
或-
\d*
- 零个或多个数字\.?
- 一个可选的小数点\d+
- 一个或多个数字(?<![a-zA-Z:])[-+]?\d*\.?\d+(?![a-zA-Z0-9])
或 (?<![a-zA-Z:])[-+]?\d*\.?\d+\b
。 - Wiktor Stribiżewre.findall("[^a-zA-Z:]([-+]?\d+[\.]?\d*)", t)
我刚刚在你的搜索中,在“number”部分周围添加了括号。
?
,但这可能会导致其他奇怪的行为。我认为你需要提供更多的样本来说明你想要发生什么,以便得到准确的正则表达式。这是修改后的正则表达式:[^a-zA-Z:]?([-+]?\d+[\.]?\d*)
。 - Shawn Tabrizi
re.findall(r"[^a-zA-Z:]([-+]?\d*\.?\d+)", t)
或者尝试使用re.findall(r"(?<![a-zA-Z:])[-+]?\d*\.?\d+", t)
。 - Wiktor Stribiżew[^a-zA-Z:]
? - Wiktor Stribiżewre.findall(r"(?<![a-zA-Z:])[-+]?\d*\.?\d+", t)
,或者请提供失败的代码。 - Wiktor Stribiżew