我有一个字符串格式如下:
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只有在不是较大字符串的一部分时才匹配。