알파 문자를 정규식과 어떻게 일치시킬 수 있습니까? \w
에있는 문자를 원하지만 \d
에없는 문자를 원합니다. 유니 코드 호환이 가능하기 때문에 [a-zA-Z]
을 사용할 수 없습니다.python-re : 알파 문자를 일치시키는 방법
답변
첫 번째 두 문장은 서로 모순됩니다. "\w
에 있지만 \d
에 없음"에는 밑줄이 포함됩니다. 나는 세 번째 문장에서 밑줄을 원하지 않는다고 가정하고 있습니다.
봉투 뒷면에 Venn 다이어그램을 사용하면 도움이됩니다.
(1) (즉, 알파, 숫자 또는 밑줄이 아니다 아무것도하지 않으려는) \w
일치되지 않는 문자 =>\W
(2) 숫자 =의 우리가 원하지 않는 것을 보자 >\d
(3) =>_
그래서 우리가 원하지 않는 어떤 문자 클래스 [\W\d_]
아무것도이고 결과적으로 우리가 원하는 무엇 문자 클래스 다음 [^\W\d_]
에서 아무거나는 간단한 예제 밑줄 (파이썬 2.6).
>>> import re
>>> rx = re.compile("[^\W\d_]+", re.UNICODE)
>>> rx.findall(u"abc_def,k9")
[u'abc', u'def', u'k']
또한 탐사는이 방법의 몇 가지 단점 계시 :
>>> import unicodedata as ucd
>>> allsorts =u"\u0473\u0660\u06c9\u24e8\u4e0a\u3020\u3021"
>>> for x in allsorts:
... print repr(x), ucd.category(x), ucd.name(x)
...
u'\u0473' Ll CYRILLIC SMALL LETTER FITA
u'\u0660' Nd ARABIC-INDIC DIGIT ZERO
u'\u06c9' Lo ARABIC LETTER KIRGHIZ YU
u'\u24e8' So CIRCLED LATIN SMALL LETTER Y
u'\u4e0a' Lo CJK UNIFIED IDEOGRAPH-4E0A
u'\u3020' So POSTAL MARK FACE
u'\u3021' Nl HANGZHOU NUMERAL ONE
>>> rx.findall(allsorts)
[u'\u0473', u'\u06c9', u'\u4e0a', u'\u3021']
는 U + 3021 (항저우 숫자 하나) 숫자로 취급됩니다 (따라서이 w \ 일치)하지만이 나타납니다 "파이썬 해석하는 자리 십진수 "(카테고리의 Nd)"를 의미하는 "그래서 일치하지 않는 \ D
U +
모든 CJK 표의 문자가 분류된다 \ w에 일치하지 않음 2438 (원 라틴어 소문자 Y) "글자"로 일치하므로 \ w
위의 3 가지 사항 중 무엇을 염려하든 상관없이,이 접근법은 현재 출시 된 re 모듈에서 나오는 최선의 방법입니다. 나중에 \ p {letter}와 같은 구문이 사용됩니다.
감사합니다. 당신이 언급 한 단점에도 불구하고 나는 여기서 시작할 수 있고 내가 무엇을 조정할 수 있는지를 생각할 수 있다고 생각합니다. – basaundi
무엇에 대해 :
\p{L}
당신은 참조로이 문서를 사용하기 위해 할 수있는 : Unicode Regular Expressions
편집 :이 Python doesn't handle Unicode expressions을 보인다. 이 링크로보세요 없습니다 : Handling Accented Characters with Python Regular Expressions -- [A-Z] just isn't good enough (더 이상 활성, 인터넷 아카이브 링크)
또 다른 참조 :
- re.UNICODE
- python and regular expression with unicode
- Unicode Technical Standard #18: Unicode Regular Expressions
들어 후손, 여기에 블로그의 예 :
import re
string = 'riché'
print string
riché
richre = re.compile('([A-z]+)')
match = richre.match(string)
print match.groups()
('rich',)
richre = re.compile('(\w+)',re.LOCALE)
match = richre.match(string)
print match.groups()
('rich',)
richre = re.compile('([é\w]+)')
match = richre.match(string)
print match.groups()
('rich\xe9',)
richre = re.compile('([\xe9\w]+)')
match = richre.match(string)
print match.groups()
('rich\xe9',)
richre = re.compile('([\xe9-\xf8\w]+)')
match = richre.match(string)
print match.groups()
('rich\xe9',)
string = 'richéñ'
match = richre.match(string)
print match.groups()
('rich\xe9\xf1',)
richre = re.compile('([\u00E9-\u00F8\w]+)')
print match.groups()
('rich\xe9\xf1',)
matched = match.group(1)
print matched
richéñ
감사합니다.하지만 \ u00E9- \ u00F8과 같은 범위를 지정하면 문자가 (CJK) 구두점 기호 또는 0-9 이외의 숫자 기호임을 알 수 없습니다. – basaundi
http://www.tamasoft.co.jp/en-general-info/unicode.html과 같은 문서를 참조하고 모든 문자 간격을 선택하면 문자 범위로 작업 할 수 있습니다 (지루할 수 있음 ...)); 이 링크는 또한 당신을 도울 수 있습니다 : http://kourge.net/projects/regexp-unicode-block –
예를 들어 여기서 도움이 될 것입니다. –
당신은 단일 문자와 일치하도록 다음과 같은 표현 중 하나를 사용할 수 있습니다
(?![\d_])\w
또는 여기
\w(?<![\d_])
내가
\w
에 대한 일치하지만,
[\d_]
확인은 그 후/이전 일치하지 않습니다 . 워드 프로세서
:
(?!...)
Matches if ... doesn’t match next. This is a negative lookahead assertion. For example, Isaac (?!Asimov) will match 'Isaac ' only if it’s not followed by 'Asimov'.
(?<!...)
Matches if the current position in the string is not preceded by a match for .... This is called a negative lookbehind assertion. Similar to positive lookbehind assertions, the contained pattern must only match strings of some fixed length and shouldn’t contain group references. Patterns which start with negative lookbehind assertions may match at the beginning of the string being searched.
- 1. 키릴 문자를 정규 표현식과 일치시키는 방법
- 2. UITextField에서 알파, 알파 숫자 및 특수 문자를 비활성화하는 방법은 무엇입니까?
- 3. 문자, 숫자 및 특정 문자를 일치시키는 정규식?
- 4. MySQL 정규식에서 UTF8 문자를 일치시키는 방법은 무엇입니까?
- 5. 파일 확장자 앞에있는 모든 문자를 일치시키는 정규식
- 6. Regex - 외국 문자를 일치시키는 정규식은 무엇입니까?
- 7. 대소 문자를 구분하지 않는 값과 XPath를 일치시키는 방법
- 8. MySQL 정수 비교에서 후행 알파 문자를 무시합니다.
- 9. AlphaNumeric과 패턴을 일치시키는 정규 표현식
- 10. Arduino에서 문자열의 텍스트를 일치시키는 방법
- 11. C에서 문자열 정규식을 일치시키는 방법 + +
- 12. perl regex는 후행 공백을 제외한 모든 문자를 일치시키는 데 도움을줍니다.
- 13. Excel 공식을 사용하여 셀에서 첫 번째 비 알파 문자를 찾으십니까?
- 14. 웹 사이트에 외국 문자를 코딩하는 방법
- 15. 알파 정렬 stringgrid
- 16. 주석에서 태그를 일치시키는 Regex
- 17. 대괄호 안에있는 숫자와 정규식을 일치시키는 방법
- 18. 이미지 태그의 링크를 정규식과 일치시키는 방법
- 19. 유효한 단어를 루비 일반 표현식과 일치시키는 방법
- 20. RegEx를 사용하여 개별 CSS 속성을 일치시키는 방법
- 21. Excel : 2 열과 검색 키워드를 일치시키는 방법
- 22. '더 나은'MySQL 문에서 ID 집합을 일치시키는 방법
- 23. SPARQL을 통해 정확한 단어를 일치시키는 방법
- 24. 일치점을 텍스트의 정확한 지점에서 일치시키는 방법
- 25. 알파 채널
- 26. ForeColor의 알파
- 27. iPhone에서 겹쳐지는 알파 페이드를 제어하는 방법
- 28. OpenCV - 알파 채널로 마커를 찾는 방법
- 29. 투명도/알파 캔버스에 이미지를 그리는 방법
- 30. 문자열의 문자를 바꾸는 방법
"유니 코드 호환"- 그건 당신이 예를 들어, é 전자와 모두 일치 할 것을 의미 하는가? – Seth
파이썬에서 유니 코드 문자열을 표시하려면 다음을 사용해야 함을 기억하십시오. u'Unicode string here '- str.find()를 시도 했습니까? str은 유니 코드 문자열입니다. – Alex
내가 의미하는 바는 내가 a, é, あ, 日 나 그러나 1은 아니 었습니다. (도트), 9, 9 등. 예를 들면. – basaundi