Tôi cần phải tách tiếng Trung ra khỏi một chuỗi các chuỗi ngày hôm nay và đang tìm kiếm một regex Python đơn giản. Bất kỳ đề xuất?Tìm tất cả văn bản tiếng Trung trong một chuỗi bằng Python và Regex
Trả lời
Câu trả lời ngắn, nhưng tương đối toàn diện cho hẹp Unicode xây dựng của python (trừ ordinals> 65535 mà chỉ có thể được đại diện trong hẹp Unicode được xây dựng thông qua cặp thay thế):
RE = re.compile(u'[⺀-⺙⺛-⻳⼀-⿕々〇〡-〩〸-〺〻㐀-䶵一-鿃豈-鶴侮-頻並-龎]', re.UNICODE)
nochinese = RE.sub('', mystring)
Mã để xây dựng RE và nếu bạn cần phát hiện ký tự Trung Quốc trong các supplementary plane để tạo hình rộng:
# -*- coding: utf-8 -*-
import re
LHan = [[0x2E80, 0x2E99], # Han # So [26] CJK RADICAL REPEAT, CJK RADICAL RAP
[0x2E9B, 0x2EF3], # Han # So [89] CJK RADICAL CHOKE, CJK RADICAL C-SIMPLIFIED TURTLE
[0x2F00, 0x2FD5], # Han # So [214] KANGXI RADICAL ONE, KANGXI RADICAL FLUTE
0x3005, # Han # Lm IDEOGRAPHIC ITERATION MARK
0x3007, # Han # Nl IDEOGRAPHIC NUMBER ZERO
[0x3021, 0x3029], # Han # Nl [9] HANGZHOU NUMERAL ONE, HANGZHOU NUMERAL NINE
[0x3038, 0x303A], # Han # Nl [3] HANGZHOU NUMERAL TEN, HANGZHOU NUMERAL THIRTY
0x303B, # Han # Lm VERTICAL IDEOGRAPHIC ITERATION MARK
[0x3400, 0x4DB5], # Han # Lo [6582] CJK UNIFIED IDEOGRAPH-3400, CJK UNIFIED IDEOGRAPH-4DB5
[0x4E00, 0x9FC3], # Han # Lo [20932] CJK UNIFIED IDEOGRAPH-4E00, CJK UNIFIED IDEOGRAPH-9FC3
[0xF900, 0xFA2D], # Han # Lo [302] CJK COMPATIBILITY IDEOGRAPH-F900, CJK COMPATIBILITY IDEOGRAPH-FA2D
[0xFA30, 0xFA6A], # Han # Lo [59] CJK COMPATIBILITY IDEOGRAPH-FA30, CJK COMPATIBILITY IDEOGRAPH-FA6A
[0xFA70, 0xFAD9], # Han # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70, CJK COMPATIBILITY IDEOGRAPH-FAD9
[0x20000, 0x2A6D6], # Han # Lo [42711] CJK UNIFIED IDEOGRAPH-20000, CJK UNIFIED IDEOGRAPH-2A6D6
[0x2F800, 0x2FA1D]] # Han # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800, CJK COMPATIBILITY IDEOGRAPH-2FA1D
def build_re():
L = []
for i in LHan:
if isinstance(i, list):
f, t = i
try:
f = unichr(f)
t = unichr(t)
L.append('%s-%s' % (f, t))
except:
pass # A narrow python build, so can't use chars > 65535 without surrogate pairs!
else:
try:
L.append(unichr(i))
except:
pass
RE = '[%s]' % ''.join(L)
print 'RE:', RE.encode('utf-8')
return re.compile(RE, re.UNICODE)
RE = build_re()
print RE.sub('', u'美国').encode('utf-8')
print RE.sub('', u'blah').encode('utf-8')
Tìm thấy điều này trên internets và nó có vẻ hoạt động hoàn hảo.
#!/usr/bin/env python
# -*- encoding: utf8 -*-
import re
sample = u'I am from 美国。We should be friends. 朋友。'
for n in re.findall(ur'[\u4e00-\u9fff]+',sample):
print n
Output:
美国
朋友
Điều này sẽ không hoạt động đối với tất cả các ký tự Trung Quốc vì một số là cặp thay thế khi mã hóa UTF-16. (Vì bạn đang sử dụng \ u4e00 và \ u9fff có vẻ như bạn là UTF-16) –
@Stephen: điều này là đúng, nhưng các ký tự Trung Quốc bên ngoài BMP phần lớn là biến thể/hình thức lịch sử không được sử dụng trong văn bản hiện đại của Trung Quốc, vì vậy nó không quan trọng. Các vấn đề tiềm năng khác mà Prairiedogg có thể không quan tâm: như bạn có thể thấy trong ví dụ trên, mã sẽ trích xuất các ký tự Hán nhưng bỏ qua dấu câu Trung Quốc; nó cũng sẽ bỏ qua các biểu tượng khác của Trung Quốc (các ký tự được khoanh tròn, vv); và nó sẽ làm những điều kỳ lạ và khủng khiếp với văn bản tiếng Nhật. – Porculus
Thực ra khi tôi đang làm việc thông qua bộ dữ liệu của mình, tôi nghĩ rằng TokenMacGuy là chính xác - Tôi thực sự muốn xóa mọi thứ không phải là tiếng Latinh. – Prairiedogg
- 1. tìm tất cả văn bản trước khi sử dụng regex
- 2. Cắt ngắn văn bản tiếng Trung
- 3. Regex + Xóa tất cả văn bản trước khi khớp
- 4. Tìm tất cả các nút văn bản
- 5. Python regex - sự khác biệt giữa tìm kiếm và tìm tất cả
- 6. Phát hiện xem văn bản bằng tiếng Anh có python
- 7. tìm tất cả chuỗi trong một mảng
- 8. Làm cách nào để gắn thẻ và đoạn văn bản tiếng Pháp bằng NLTK và Python?
- 9. Cách tìm kiếm tất cả các trường văn bản trong DB cho một số chuỗi con bằng T-SQL
- 10. Tìm tất cả các chuỗi trong các tệp mã python
- 11. Python Regex chỉ chụp một số văn bản nhất định
- 12. Tìm tất cả các nút văn bản trong trang HTML
- 13. XCode - văn bản tìm kiếm trong tất cả các tệp
- 14. Python: Nhận văn bản của một trận đấu Regex
- 15. Cách lọc tiếng Trung (CHỈ tiếng Trung)
- 16. Tìm và thay thế văn bản trong tệp .docx - Python
- 17. Tìm và Thay thế Tất cả Nhưng Văn bản Giữa Dấu ngoặc kép trong VS2010
- 18. văn bản Sublime regex tìm và thay thế
- 19. Hình ảnh xác thực cho tiếng Nhật và tiếng Trung?
- 20. CSS: Văn bản trung tâm cả ngang và dọc?
- 21. Tìm tất cả (từ tiếng Anh) chất nền của một chuỗi đã cho
- 22. python - regex tìm kiếm và findall
- 23. Làm cách nào để triển khai tìm kiếm toàn văn bằng tiếng Trung trên PostgreSQL?
- 24. Thuật toán hiệu quả để tìm tất cả các từ khóa trong một văn bản
- 25. cách sử dụng ký tự tiếng Trung và tiếng Nhật làm chuỗi trong java?
- 26. Tìm chỉ mục của tất cả các đối sánh regex trong Python?
- 27. Lệnh Unix để tìm kiếm chuỗi văn bản trong tất cả các tệp
- 28. Thay thế tất cả "(" và ")" trong một chuỗi trong Java
- 29. Xóa tất cả các lần xuất hiện của chuỗi trong một chuỗi từ danh sách python
- 30. regex để lấy tất cả văn bản bên ngoài dấu ngoặc đơn
Bạn có chắc chắn muốn xóa tiếng Trung hoặc bạn có thực sự muốn xóa mọi thứ không phải tiếng Latinh không? – SingleNegationElimination
Tại sao cần thiết (hoặc hữu ích) để xóa ký tự Trung Quốc khỏi chuỗi thay vì dịch chúng? –