我正在编写一个正则表达式,用于使用python的re模块与简单单词和单个带连字符的单词进行匹配,例如在:
test_case_input = """the wide-field infrared survey explorer is a nasa
infrared-wavelength space telescope in an earth-orbiting satellite which
performed an all-sky astronomical survey. be careful of -tricky tricky-
hyphens --- be precise."""
应匹配:
test_case_output = ['the', 'wide-field', 'infrared', 'survey', 'explorer',
'is', 'a', 'nasa', 'infrared-wavelength', 'space', 'telescope', 'in', 'an',
'earth-orbiting', 'satellite', 'which', 'performed', 'an', 'all-sky',
'astronomical', 'survey', 'be', 'careful', 'of', 'tricky', 'tricky',
'hyphens', 'be', 'precise']
我找到了一个匹配单个带连字符的正则表达式: r“[az] + - [az] +”,另一个用于简单单词 r“[az] +”< / strong>然后我尝试使用或 r“[az] + - [az] + | [az] +”,但输出错误:
[' wide', ' infrared', ' survey', ' explorer', ' is', ' a', ' nasa',
'infrared-wavelength ', ' telescope', ' in', ' an', ' earth', ' satellite',
' which', ' an', ' all', ' astronomical', ' survey', ' be', ' careful', ' of',
' tricky', ' be', ' precise']
如果我使用gruops: r“(:?[az] + - [az] +)|(:?[az] +)”两者都没有,我认为另一个解决方案工作 r“[az] +(:? - [az] +)?”也没有。
这显然是可能的,但有些事我不清楚。怎么了?
答案 0 :(得分:3)
您可以使用:
r'[a-z]+(?:-[a-z]+)*'
答案 1 :(得分:2)
有几件事:
(?:
而不是(:?
如果您解决了第一个问题,则根本不需要群组。
*即字符串的空白或开头/结尾。
答案 2 :(得分:1)
这个正则表达式应该这样做。
\b[a-z]+-[a-z]+\b
\b
表示字边界。