Regex để lọc tiếng Việt

convert unicode sang string là sao :V

khổ ông Python 2 quá, 4 ngày nữa là ngủm củ tỏi rồi còn viết làm gì :V

5 Likes

Thêm ur vào đầu string là ok thôi. String pattern mà không ở raw string thì nguy hiểm.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import re

regex = re.compile(ur"^[aàảãáạăằẳẵắặâầẩẫấậbcdđeèẻẽéẹêềểễếệfghiìỉĩíịjklmnoòỏõóọôồổỗốộơờởỡớợpqrstuùủũúụưừửữứựvwxyỳỷỹýỵz0123456789_]+", re.UNICODE)
s = u"ai cũng biết"
print re.match(regex, s)
4 Likes

viết như kìa thì kiểu của s là

<type , str>

còn kiểu của mình đang là

<type 'unicode'>
1 Like

Hả @@ u'' là unicode string mà @@

2 Likes

:v 4 ngày nữa đi rồi hả anh :), type , str thì match được còn type , unicode thì không anh ạ

Python 2 chuỗi có 2 kiểu Unicode u'' và chuỗi thường ascii hay sao ấy :V

tất cả phải xài u''

3 Likes

mình nhâm chút, đang chạy python2 hả bạn :slight_smile:

mình làm được rồi, phải thêm cái ur ở chỗ re.compile .

anh gợi ý em cách lọc string: số hoặc số + chữ với ạ, mỗi chữ thì không lấy:

có mỗi số thì em làm được rồi.

Bạn tìm regex password mà có yêu cầu cả chữ và số ấy. Regex này tương tự với regex bạn cần tìm.

4 Likes

đây nè: https://stackoverflow.com/questions/43127814/regex-for-at-least-1-number-1-lower-case-and-1-upper-case-letter

ví dụ bắt đầu bằng chuỗi chỉ có a-z hoặc 0-9:
[a-z0-9]+
bắt buộc phải có 1 ký tự a-z:
(?=.*[a-z])[a-z0-9]+
bắt buộc phải có 1 ký tự 0-9:
(?=.*[0-9])[a-z0-9]+
bắt buộc phải có 1 ký tự 0-9 và 1 ký tự a-z:
(?=.*[a-z])(?=.+[0-9])[a-z0-9]+
match toàn bộ chuỗi thì thêm ^ $ vào:
^(?=.*[a-z])(?=.+[0-9])[a-z0-9]+$
password có 6 ký tự trở lên thì thay dấu + bằng {6,}
^(?=.*[a-z])(?=.*[0-9])[a-z0-9]{6,}$

4 Likes

cám ơn bạn mình regex theo kiểu này không biết có xót trường hợp nào không:

'\S*\d+\S*'

em theo kiểu này không biết có xót trường hợp nào không:

'\S*\d+\S*'

toàn số vẫn match ~.~

3 Likes

yêu cầu cảu em là là lấy số hoặc sô + chữ anh ạ, của em không phải password.

à yêu cầu vậy à :V Vậy ví dụ a8a8a nó có match toàn bộ ko, có yêu cầu match toàn bộ ko :V

\S là lấy khác khoảng trắng à :V Vậy lỡ có underscore _ hay !#@$ thì sao

số hoặc số và chữ thì tương đương với phải có 1 ký tự là số, vậy xài ^(?=.*[0-9])[a-z0-9]+$ là được rồi :V

3 Likes

chỉ cần có số là em lấy thôi anh, không cần biết có thêm gì không

vậy em làm 1 vòng for là đủ rồi cần gì regex chi :V :V Cái \S*\d+\S* có lẽ đúng rồi :V

if any(c in '0123456789' for c in s):
    # ...

có thể xài ord(c) cho lẹ hơn:

if any(48 <= ord(c) <= 57 for c in s): # ord('0') == 48, ord('9') == 57
    # ...

edit: lâu quá ko viết python hehe

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?