【发布时间】:2021-08-08 02:54:37
【问题描述】:
以下适用于简单的逗号分隔字符串,它没有句点,但如果发现实数中的句点,它会中断。
pattern = re.compile(r"^(\w+)(,\s*\w+)*$")
如何修改或更改以上内容以忽略句点?但仍然验证给定的字符串是否以逗号分隔?
一个示例测试字符串是"23,HIGH,1.0,LOW,1.0,HIGH,1.0,LOW,1.0"。
【问题讨论】:
标签: python python-3.x regex
以下适用于简单的逗号分隔字符串,它没有句点,但如果发现实数中的句点,它会中断。
pattern = re.compile(r"^(\w+)(,\s*\w+)*$")
如何修改或更改以上内容以忽略句点?但仍然验证给定的字符串是否以逗号分隔?
一个示例测试字符串是"23,HIGH,1.0,LOW,1.0,HIGH,1.0,LOW,1.0"。
【问题讨论】:
标签: python python-3.x regex
\w 匹配“单词”字符:字母、数字和_。它不匹配一个点。如果您也想匹配点,请使用[\w.] 而不是\w:
pattern = re.compile(r"^([\w.]+)(,\s*[\w.]+)*$")
如果您期望负数,您可能还想添加-。要将 - 放入字符类中,您要么必须使用反斜杠转义它,要么确保它是类中的第一个或最后一个字符:
[-.\w]
[\w.-]
[\w\-.]
【讨论】:
\w+ 更改为\w。我建议将\w 更改为[\w.]。
.+ 处理其他字符可能会更好,例如#@ 等。CSV 行似乎包括任意字符串文本和实数。
如果该值只能是数字,并且不希望仅匹配点,则可以使用和交替来匹配单词字符或数字。
^(?:[+-]?\d*\.?\d+|\w+)(?:,(?:[+-]?\d*\.?\d+|\w+))*$
说明
^ 字符串开始(?:非捕获组
[+-]?\d*\.?\d+ 匹配可选的+ 或-,然后是可选的数字、可选的点和1 个以上的数字|或者\w+ 匹配 1+ 个单词字符)关闭非捕获组(?:非捕获组
,匹配逗号(?:[+-]?\d*\.?\d+|\w+)与第一部分相同的模式)* 关闭非捕获组并可选择重复以匹配单个事件$字符串结束【讨论】: