簡體   English   中英

python正則表達式:從字符串中獲取結束數字

[英]python regex: get end digits from a string

我對 python 和正則表達式很陌生(這里是正則表達式新手),我有以下簡單的字符串:

s=r"""99-my-name-is-John-Smith-6376827-%^-1-2-767980716"""

我只想提取上述字符串中的最后一位數字,即 767980716,我想知道如何使用 python 正則表達式來實現這一點。

我想做類似的事情:

re.compile(r"""-(.*?)""").search(str(s)).group(1)

表示我想在 (.*?) 之間找到以“-”開頭並以字符串結尾結尾的內容 - 但這不返回任何內容..

我想知道是否有人可以指出我正確的方向..謝謝。

您可以使用re.match僅查找字符:

>>> import re
>>> s=r"""99-my-name-is-John-Smith-6376827-%^-1-2-767980716"""
>>> re.match('.*?([0-9]+)$', s).group(1)
'767980716'

或者, re.finditer正常工作:

>>> next(re.finditer(r'\d+$', s)).group(0)
'767980716'

所有正則表達式組件的說明:

  • .*? 一個非貪婪匹配並且只消耗盡可能多的(貪婪匹配會消耗除最后一位數字之外的所有內容)。
  • [0-9]\\d是捕獲數字的兩種不同方式。 請注意,后者也匹配其他書寫方案中的數字,例如 ୪ 或 ൨。
  • 括號 ( () ) 使表達式的內容成為一個組,可以使用group(1)檢索(或 2 表示第二組,0 表示整個匹配)。
  • +表示多個條目(末尾至少有一個數字)。
  • $僅匹配輸入的結尾。

findall很好很簡單:

import re

s=r"""99-my-name-is-John-Smith-6376827-%^-1-2-767980716"""

print re.findall('^.*-([0-9]+)$',s)

>>> ['767980716']

正則表達式說明:

^         # Match the start of the string
.*        # Followed by anthing
-         # Upto the last hyphen
([0-9]+)  # Capture the digits after the hyphen
$         # Upto the end of the string

或者更簡單地匹配字符串'([0-9]+)$'末尾的數字

你的正則Regex應該是(\\d+)$

  • \\d+用於匹配數字(一個或多個)
  • $用於匹配字符串的末尾。

所以,你的代碼應該是: -

>>> s = "99-my-name-is-John-Smith-6376827-%^-1-2-767980716"
>>> import re
>>> re.compile(r'(\d+)$').search(s).group(1)
'767980716'

並且您不需要在這里使用str函數,因為s已經是一個字符串。

使用下面的正則表達式

\d+$

$表示字符串的結尾..

\\d是一個數字

+匹配前面的字符 1 到多次

為需要更多繁重工作的東西保存正則表達式。

>>> def parse_last_digits(line): return line.split('-')[-1]
>>> s = parse_last_digits(r"99-my-name-is-John-Smith-6376827-%^-1-2-767980716")
>>> s
'767980716'

我一直在嘗試這些解決方案中的幾個,但如果字符串末尾沒有數字,許多解決方案似乎都失敗了。 以下代碼應該可以工作。

import re

W = input("Enter a string:")
if re.match('.*?([0-9]+)$', W)== None:
    last_digits = "None"
else:
    last_digits = re.match('.*?([0-9]+)$', W).group(1)
print("Last digits of "+W+" are "+last_digits)

嘗試使用\\d+$代替。 匹配一個或多個數字字符,后跟字符串的結尾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM