正则表达式在仪表显示中匹配不同的数字
Regex matching different numbers in meter presentation
我正在尝试匹配距离表示的不同变体,这对于较大的值非常有效,但在单个数字上失败
^(?:(?<distanceMeter>\d+[,|.]?\d+?) ?\/? ?(?<distanceFemaleMeter>\d+?[,|.]?\d+?)?) ?-m ?(?<text>[\w\s]+)
比赛
- 2000/ 1,500 米行和
- 2000 米行
但是匹配失败
- 10/ 5 米行
- 9 米行
我以为 d+ 总是匹配 1 个或多个数字,但它不起作用。
发帖后我发现创建一个新组可以解决这个问题,所以不用 \d+?使用 (?:\d+)?作品
^(?:(?<distanceMeter>\d+[,|.]?(?:\d+)?) ?\/? ?(?<distanceFemaleMeter>\d+?[,|.]?(?:\d+)?)?) ?-m ?(?<text>[\w\s]+)
在您尝试的模式中,您使用 \d+?
匹配至少 1 个数字,并使其非贪婪匹配最少的数量,但仍然必须至少有一个数字。
注意使用(?:\d+)?
和\d*
是一样的,最后使用[\w\s]+
也可以只匹配whitespace 字符(也可以只匹配换行符)你可以使用 space 代替,因为在模式的其余部分你也匹配 spaces.
您的示例应全部匹配开头的数字,然后是可选的 /
和数字部分,然后是 -m
部分,后跟“文本”[=29] =]
对于该格式,您可以将整个部分设为 /
,数字可选。
^(?<distanceMeter>\d+(?:[,.]\d+)?)(?: ?\/ ?(?<distanceFemaleMeter>\d+(?:[,.]\d+)?))? ?-m ?(?<text>\w+(?: \w+)*)
^
字符串开头
(?<distanceMeter>\d+(?:[,.]\d+)?)
组 distanceMeter,匹配 1+ 位带可选小数部分的数字
(?:
非捕获组
?\/ ?
匹配 /
可选 spaces
(?<distanceFemaleMeter>\d+(?:[,.]\d+)?)
组 distanceFemaleMeter,匹配 1+ 位带可选小数部分的数字
)?
关闭非捕获组并使其可选
?-m ?
匹配 -m
可选 spaces
(?<text>\w+(?: \w+)*)
组 text,匹配 1+ 个单词字符并可选择重复 space 和 1+ 个单词字符
看到一个regex demo.
我正在尝试匹配距离表示的不同变体,这对于较大的值非常有效,但在单个数字上失败
^(?:(?<distanceMeter>\d+[,|.]?\d+?) ?\/? ?(?<distanceFemaleMeter>\d+?[,|.]?\d+?)?) ?-m ?(?<text>[\w\s]+)
比赛
- 2000/ 1,500 米行和
- 2000 米行
但是匹配失败
- 10/ 5 米行
- 9 米行
我以为 d+ 总是匹配 1 个或多个数字,但它不起作用。
发帖后我发现创建一个新组可以解决这个问题,所以不用 \d+?使用 (?:\d+)?作品
^(?:(?<distanceMeter>\d+[,|.]?(?:\d+)?) ?\/? ?(?<distanceFemaleMeter>\d+?[,|.]?(?:\d+)?)?) ?-m ?(?<text>[\w\s]+)
在您尝试的模式中,您使用 \d+?
匹配至少 1 个数字,并使其非贪婪匹配最少的数量,但仍然必须至少有一个数字。
注意使用(?:\d+)?
和\d*
是一样的,最后使用[\w\s]+
也可以只匹配whitespace 字符(也可以只匹配换行符)你可以使用 space 代替,因为在模式的其余部分你也匹配 spaces.
您的示例应全部匹配开头的数字,然后是可选的 /
和数字部分,然后是 -m
部分,后跟“文本”[=29] =]
对于该格式,您可以将整个部分设为 /
,数字可选。
^(?<distanceMeter>\d+(?:[,.]\d+)?)(?: ?\/ ?(?<distanceFemaleMeter>\d+(?:[,.]\d+)?))? ?-m ?(?<text>\w+(?: \w+)*)
^
字符串开头(?<distanceMeter>\d+(?:[,.]\d+)?)
组 distanceMeter,匹配 1+ 位带可选小数部分的数字(?:
非捕获组?\/ ?
匹配/
可选 spaces(?<distanceFemaleMeter>\d+(?:[,.]\d+)?)
组 distanceFemaleMeter,匹配 1+ 位带可选小数部分的数字
)?
关闭非捕获组并使其可选?-m ?
匹配-m
可选 spaces(?<text>\w+(?: \w+)*)
组 text,匹配 1+ 个单词字符并可选择重复 space 和 1+ 个单词字符
看到一个regex demo.