使用正则表达式在条件上匹配字符串

时间:2016-11-09 14:06:52

标签: python regex

我有一个字符串例如:

s = 'Knorr 12x10g Fish bouillon cube'

我希望使用正则表达式获得12x10g的部分。逻辑是找到第一个数字并将其扩展直到找到第一个空格。现在我只能将此特定字符串与以下正则表达式匹配。

val = re.findall(r'\s[0-9].x[0-9].g', s]

但我的数据中有kg,ml和其他类型的权重指标。所以这个正则表达式不适用于所有人。有什么建议 ?感谢。

3 个答案:

答案 0 :(得分:2)

  

逻辑是找到第一个数字并将其扩展直到找到第一个空格。

您可以使用\d\S*正则表达式:

import re
s = 'Knorr 12x10g Fish bouillon cube'
val = re.findall(r'\d\S*', s)
print(val)

请参阅Python demo

re.findall方法将找到以数字(\d)开头的所有非重叠的子字符串出现,其后面的空格为0 {+ \S*以外的空格。如果非空格的数量不为零,则将*替换为+(1次或更多次)。

为避免匹配尾随标点符号,您可以在正则表达式模式(\b)的末尾添加r'\d\S*\b'

答案 1 :(得分:1)

\s[0-9]{1,}.x[0-9]{1,}[a-z]{1,}\s

在此之后,您可以选择将.strip()用于派生字符串。

答案 2 :(得分:0)

对于正则表达式:

\d+\w\d+\w*(?=\s)

演示:https://regex101.com/r/1orSGQ/1

对于Python

import re
text = '''s = 'Knorr 12x10g Fish bouillon cube'
s = 'Knorr 12x10kg Fish bouillon cube'
s = 'Knorr 12x10gram Fish bouillon cube'
'''

for m in re.finditer(r"\d+\w\d+\w*(?=\s)", text):

    print('%s' % (m.group(0)))

输出

12x10g
12x10kg
12x10gram