Skip to content

E02910: 提取数字

http://cs101.openjudge.cn/practice/02910

输入一个字符串,长度不超过30,内有数字字符和非数字字符,请找出字符串中所有由连续数字字符组成的正整数,并按出现顺序输出。

输入

一个字符串,最大长度为100,不包含空格等空白符。

输出

按出现顺序输出字符串中包含的正整数,每个数字一行,不要输出前导0。保证输入字符串中的正整数均在int范围内。

样例输入

a123*456U17960?302tab5876

样例输出

123
456
17960
302
5876

来源

计算概论作业2006

⚠️:这个题目的测试数据有输出0,与题面描述输出正整数不一致。

python
def extract_integers(s):
    result = []
    num = ""
    
    for char in s:
        if char.isdigit():
            num += char
        else:
            if num:
                result.append(str(int(num)))
                num = ""
    
    if num:  # Add the last number if any
        result.append(str(int(num)))
    
    print("\n".join(result))

# Read input
s = input().strip()

# Extract and output integers
extract_integers(s)

使用正则表达式来解决这个问题。通过匹配连续的数字字符,提取出所有的正整数,并按出现顺序输出。

python
import re

# 输入字符串
input_string = input().strip()

# 使用正则表达式匹配连续的数字
numbers = re.findall(r'\d+', input_string)

# 输出所有正整数
for number in numbers:
    print(int(number))  # 转换为整数,去掉前导零

解释:

  • re.findall(r'\d+', input_string):这个正则表达式会匹配字符串中所有由连续数字组成的子串。
  • int(number):将匹配到的数字字符串转换为整数,从而去除可能存在的前导零。