【发布时间】:2020-04-07 18:01:54
【问题描述】:
我正在尝试匹配包含超过 1 个字母的单词并且: 全部大写,首字母小写,后面的字母大写,或者仅当所有字母都是大写时才在中间包含连字符。这是我的代码:
s = "ASCII, aSCII, AS-CII, AS-cii"
myset = set(re.findall(r"\b[a-z]?[A-Z]+\-?[A-Z]{1,}",s))
Out[555]: {'AS', 'AS-CII', 'ASCII', 'aSCII'}
如您所见,不应返回 "AS",因为它在连字符后包含小写字母。我该如何解决这个问题?
试过了,结果报错:
myset = set(re.findall(r"\b[a-z]?[A-Z]+\-?[A-Z]+{1,}",s))
File "<ipython-input-545-7bdc0c902553>"
myset = set(re.findall(r"\b[a-z]?[A-Z]+\-?[A-Z]+{1,}",s))
File "/home/c1962135/.local/share/virtualenvs/c1962135-9R_1M4TP/lib/python3.6/re.py", line 222, in findall
return _compile(pattern, flags).findall(string)
File "/home/c1962135/.local/share/virtualenvs/c1962135-9R_1M4TP/lib/python3.6/re.py", line 301, in _compile
p = sre_compile.compile(pattern, flags)
File "/home/c1962135/.local/share/virtualenvs/c1962135-9R_1M4TP/lib/python3.6/sre_compile.py", line 562, in compile
p = sre_parse.parse(p, flags)
File "/home/c1962135/.local/share/virtualenvs/c1962135-9R_1M4TP/lib/python3.6/sre_parse.py", line 855, in parse
p = _parse_sub(source, pattern, flags & SRE_FLAG_VERBOSE, 0)
File "/home/c1962135/.local/share/virtualenvs/c1962135-9R_1M4TP/lib/python3.6/sre_parse.py", line 416, in _parse_sub
not nested and not items))
File "/home/c1962135/.local/share/virtualenvs/c1962135-9R_1M4TP/lib/python3.6/sre_parse.py", line 619, in _parse
source.tell() - here + len(this))
error: multiple repeat
【问题讨论】:
-
你可以接受 2 Regex 吗?一个用于所有 uPERLOWER,一个用于 UPER-UPER ???
-
@Skapin 是的。我需要在我的任务中考虑到这一点