我有一个字符串格式如下:

text = "Louis,Edward,John,Billy,Don,Dean"

我想从这个字符串中提取长度在2到4之间的所有名称。如果列表中只有一个名字,就没有逗号:
text = "Louis"

我在尝试这个正则表达式:
import re
pattern = re.compile('(\w{2,4})(,\w{2,4})*')
search_result = pattern.findall('Louis,Edward,John,Billy,Don,Dean')
print(search_result)

结果是:
[('Loui', ''), ('Edwa', ''), ('rd', ',Bill'), ('Don', ',Dean')]

尽管我希望:
['John', 'Don','Dean']

我做错什么了?

最佳答案

修复正则表达式,可以在\w{2,4}周围添加单词边界。

re.findall(r'\b\w{2,4}\b', text)
# ['John', 'Don', 'Dean']

或者,
p = re.compile(r'\b\w{2,4}\b')
p.findall(text)
# ['John', 'Don', 'Dean']

这将确保名称长度2-4只有在不是较大字符串的一部分时才匹配。

10-08 15:56