Я пытаюсь сопоставить слова, состоящие из более чем 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