使用带有单词和数字的 RegEx 模式拆分字符串
split string with RegEx pattern with words and numbers
在 this post
中尝试提供帮助时出现了我的问题
我正在寻找一种 Regex 模式,该模式将此字符串拆分为 1.、2. 和 3. 或一般情况下:在一个数字(如果列表更长,则更多)后跟一个点后拆分。问题是字符串中需要的数字更多。
test_string = '1. Fruit 12 oranges 2. vegetables 7 carrot 3. NFL 246 SHIRTS'
使用这个模式我设法做到了,但是我在开始时得到一个空字符串并且不知道如何更改它。
l1 = re.split(r"\s?\d{1,2}\.", test_string)
Output l1:
['', ' Fruit 12 oranges', ' vegetables 7 carrot', ' NFL 246 SHIRTS']
所以我从拆分它改为搜索可以找到模式的内容。
l2 = re.findall(r"(?:^|(?<=\d\.))([\sa-zA-Z0-9]+)(?:\d\.|$)", pattern)
Output l2:
[' Fruit 12 oranges ', ' vegetables 7 carrot ', ' NFL 246 SHIRTS']
它真的很接近没问题,只是列表中每个元素开头的尾随空格。
对于我的任务来说,什么是好的和有效的方法?坚持使用 re.split()
拆分还是构建模式并使用 re.findall()
?我的模式是像我做的那样好还是太复杂了?
只需将 (?:\s) 添加到您的表达式中即可:
re.findall(r"(?:^|(?<=\d\.))(?:\s)([\sa-zA-Z0-9]+)(?:\s\d\.|$)", test_string)
输出是:['Fruit 12 oranges', 'vegetables 7 carrot', 'NFL 246 SHIRTS']
在 this post
中尝试提供帮助时出现了我的问题我正在寻找一种 Regex 模式,该模式将此字符串拆分为 1.、2. 和 3. 或一般情况下:在一个数字(如果列表更长,则更多)后跟一个点后拆分。问题是字符串中需要的数字更多。
test_string = '1. Fruit 12 oranges 2. vegetables 7 carrot 3. NFL 246 SHIRTS'
使用这个模式我设法做到了,但是我在开始时得到一个空字符串并且不知道如何更改它。
l1 = re.split(r"\s?\d{1,2}\.", test_string)
Output l1:
['', ' Fruit 12 oranges', ' vegetables 7 carrot', ' NFL 246 SHIRTS']
所以我从拆分它改为搜索可以找到模式的内容。
l2 = re.findall(r"(?:^|(?<=\d\.))([\sa-zA-Z0-9]+)(?:\d\.|$)", pattern)
Output l2:
[' Fruit 12 oranges ', ' vegetables 7 carrot ', ' NFL 246 SHIRTS']
它真的很接近没问题,只是列表中每个元素开头的尾随空格。
对于我的任务来说,什么是好的和有效的方法?坚持使用 re.split()
拆分还是构建模式并使用 re.findall()
?我的模式是像我做的那样好还是太复杂了?
只需将 (?:\s) 添加到您的表达式中即可:
re.findall(r"(?:^|(?<=\d\.))(?:\s)([\sa-zA-Z0-9]+)(?:\s\d\.|$)", test_string)
输出是:['Fruit 12 oranges', 'vegetables 7 carrot', 'NFL 246 SHIRTS']