如何从字符串中获取N个连续数字?
How to get N consecutive digits from a string?
我正在尝试从匹配的字符串中获取 4 个连续数字。
当我尝试 re.sub('[^\d]+', ',', "abc 23 [1981] ghj [5656]")
时它 return 是 ,23,1981,5656,
。所以当我 re.sub('[\d]{4}+', ',', "abc 23 [2021]")
时它 return 是一个错误 "multiple repeat at position 7"
因为我保留 {4}
,它不应该匹配 4 次出现的 [\d]
和 return ,1981,5656,
吗?
使用re.findall
例如:
import re
s = "abc 23 [1981] ghj [5656]"
print(re.findall(r"\[(\d{4})\]", s))
输出:
['1981', '5656']
如果你想只使用正则表达式,你想要的有点棘手。
相反,您可以使用 lambda 有条件地将字符串中不是四位数字的部分替换为逗号,并按原样保留四位数字。尝试使用此 Python 代码,
import re
s = "abc 23 [1981] ghj [5656]"
print(re.sub(r'\b(\d{4})\b|((?!\b\d{4}\b).)+', lambda x: x.group() if x.group(1) else ',', s))
随心所欲地打印,
,1981,5656,
我们在这里做的是,在 group1 中使用 \b(\d{4})\b
捕获四位数字,并使用此 ((?!\b\d{4}\b).)+
正则表达式捕获任何其他一个或多个没有四位数字的字符,然后我们做一个条件替换,如果第一个替换匹配,则 group1 不为空,因此将其替换为匹配的文本,如果 group1 为空,则表示第二个正则表达式匹配,因此使用逗号替换它。
我正在尝试从匹配的字符串中获取 4 个连续数字。
当我尝试 re.sub('[^\d]+', ',', "abc 23 [1981] ghj [5656]")
时它 return 是 ,23,1981,5656,
。所以当我 re.sub('[\d]{4}+', ',', "abc 23 [2021]")
时它 return 是一个错误 "multiple repeat at position 7"
因为我保留 {4}
,它不应该匹配 4 次出现的 [\d]
和 return ,1981,5656,
吗?
使用re.findall
例如:
import re
s = "abc 23 [1981] ghj [5656]"
print(re.findall(r"\[(\d{4})\]", s))
输出:
['1981', '5656']
如果你想只使用正则表达式,你想要的有点棘手。
相反,您可以使用 lambda 有条件地将字符串中不是四位数字的部分替换为逗号,并按原样保留四位数字。尝试使用此 Python 代码,
import re
s = "abc 23 [1981] ghj [5656]"
print(re.sub(r'\b(\d{4})\b|((?!\b\d{4}\b).)+', lambda x: x.group() if x.group(1) else ',', s))
随心所欲地打印,
,1981,5656,
我们在这里做的是,在 group1 中使用 \b(\d{4})\b
捕获四位数字,并使用此 ((?!\b\d{4}\b).)+
正则表达式捕获任何其他一个或多个没有四位数字的字符,然后我们做一个条件替换,如果第一个替换匹配,则 group1 不为空,因此将其替换为匹配的文本,如果 group1 为空,则表示第二个正则表达式匹配,因此使用逗号替换它。