在Python中只获取String中的第一个Number

时间:2015-09-14 18:18:10

标签: python string numbers

我目前面临的问题是,我有一个字符串,我只想提取第一个数字。我的第一步是从字符串中提取数字。

Headline = "redirectDetail('27184','2 -New-York-Explorer-Pass')"
print (re.findall('\d+', headline ))
Output is ['27184', '2']

在这种情况下它给了我两个数字,但我只想要第一个“27184”。

因此,我尝试使用以下代码:

 print (re.findall('/^[^\d]*(\d+)/', headline ))

但它不起作用:

 Output:[]
你能帮助我吗?任何反馈都表示赞赏

4 个答案:

答案 0 :(得分:21)

只需使用re.search,一旦找到匹配就停止匹配。

re.search(r'\d+', headline).group()

您必须删除正则表达式中的正斜杠。

re.findall(r'^\D*(\d+)', headline)

答案 1 :(得分:3)

没有正则表达式的解决方案(不一定更好):

import string

no_digits = string.printable[10:]

headline = "redirectDetail('27184','2 -New-York-Explorer-Pass')"
trans = str.maketrans(no_digits, " "*len(no_digits))

print(headline.translate(trans).split()[0])
>>> 27184

答案 2 :(得分:1)

re.search('[0-9]+', headline).group()

答案 3 :(得分:0)

在我的情况下,我想获得字符串中的第一个数字和货币,我尝试了所有解决方案,有些返回的数字没有点,其他的返回我喜欢的数字

priceString = "Rs249.5"

def advancedSplit(unformatedtext):
    custom_numbers = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
    priceList = []
    str_length = len(unformatedtext)
    index = 0
    for l in range(len(unformatedtext)):
        if unformatedtext[l] in custom_numbers:
            price = unformatedtext[slice(l, len(unformatedtext))]
            currency = unformatedtext[slice(0,l)]
            priceList.append(currency)
            priceList.append(price)
            break
        elif index == str_length:
            priceList.append("")
            priceList.append("unformatedtext")
            break
        else:
            continue
            
        index += 1
    return priceList
print(advancedSplit(priceString))

为了确保列表的 len 始终为 2,我添加了 elif 以防 priceString 只是“249.5”,因为我在网络抓取中使用它