我目前面临的问题是,我有一个字符串,我只想提取第一个数字。我的第一步是从字符串中提取数字。
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:[]
你能帮助我吗?任何反馈都表示赞赏
答案 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”,因为我在网络抓取中使用它