描述
给一段文字,可能有中文,把里面的所有非负整数都找出来,不需要去掉前导0。如果碰到 "012.34"这样的就应该找出两个整数 012和34,碰到 0.050,就找出 0和050
import re // 在此处补充你的代码 while True: try: s = input() lst = re.findall(m,s) for x in lst: print(x) except: break
输入
一段文字
输出
按顺序输出所有整数,每个整数一行
样例输入
给一段文字,可能有中文,把里面的所有整数都找出来,不需要去掉前导0去。 如果碰到 "012.34"这样的就应该找出两个整数 012和34,碰到 0.050,就找出 0和050
样例输出
0 012 34 012 34 0 050 0 050
代码如下:
import re m= r'(?<!\d)(\d+)(?!\d)' while True: try: s = input() lst = re.findall(m,s) for x in lst: print(x) except: break
运行结果如下:
使用正则表达式模式
r'(?<!\d)(\d+)(?!\d)'
来匹配整数。这个模式使用了否定向后查找(?<!\d)
和否定向前查找(?!\d)
,以确保匹配的整数不是其他数字的一部分。解释:
r'(?<!\d)(\d+)(?!\d)' 我们来逐个解析它的部分。
1.(?<!...)
: 这是一个否定的向后查找。它表示“只有在当前位置的前面没有匹配到...时才继续匹配”。在此正则表达式中,它是
(?<!\d)
,这意味着只有在当前位置的前面不是一个数字时才继续匹配。2.(\d+)
: 这是一个捕获组。\d
匹配任意数字,+
表示匹配一个或多个。所以,这部分会匹配一个或多个连续的数字。
3.(?!...)
: 这是一个否定的向前查找。它表示“只有在当前位置的后面没有匹配到...时才继续匹配”。在此正则表达式中,它是
(?!\d)
,这意味着只有在当前位置的后面不是一个数字时才继续匹配。将这三部分组合在一起:
r'(?<!\d)(\d+)(?!\d)'
,这个正则表达式的意思是:
- 查找一个位置,这个位置的前面不是数字;
- 从这个位置开始,匹配一个或多个连续的数字;
- 确保这个位置的后面也不是数字。
这样的目的是为了确保我们匹配到的数字是独立的,而不是其他数字的一部分。例如,在字符串 "123abc" 中,这个正则表达式会匹配到 "123",但在 "1234abc" 中,它只会匹配到 "123" 和 "4",因为 "1234" 是一个连续的数字序列,不满足前后都不是数字的条件。
[Python3]描述给一段文字,可能有中文,把里面的所有非负整数都找出来,不需要去掉前导0。如果碰到 “012.34“这样的就应该找出两个整数 012和34,碰到 0.050,就找出 0和050im
于 2023-11-30 22:54:08 首次发布