我有一个字符串例如:
s = 'Knorr 12x10g Fish bouillon cube'
我希望使用正则表达式获得12x10g的部分。逻辑是找到第一个数字并将其扩展直到找到第一个空格。现在我只能将此特定字符串与以下正则表达式匹配。
val = re.findall(r'\s[0-9].x[0-9].g', s]
但我的数据中有kg,ml和其他类型的权重指标。所以这个正则表达式不适用于所有人。有什么建议 ?感谢。
答案 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