正则的效果,可以到这里验证

索引

chinese-english-number

1
2
3
4
5
6
7
# 保留文本中的汉字、英文、数字(标点符号不会保留)
import re
# pattern = "[^\u4e00-\u9fa5^A-Z^a-z^0-9]" # 效果等价
# 如果需要保留字间的空格,直接在正则末尾加一个空格就行 [^\u4e00-\u9fa5A-Za-z0-9 ]
pattern = "[^\u4e00-\u9fa5A-Za-z0-9]"
text = "\某某,\\你好=+!123【我//""们】abc~————聊/天'吧::!这.!!_#??()个‘’“”¥$主|意()不错......!"
result = re.sub(pattern,"",text)

symbol

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 标点符号(中英文)
import string

# 最后"\\\"是转义,为了得到"\"
# 中文标点
pattern="[!?。"#$%&'()*+,-/:;<=>@[\]^_`{|}~⦅⦆「」、、〃》「」『』【】〔〕〖〗〘〙〚〛〜〝〞〟〰〾〿–—‘'‛“”„‟…‧﹏.¥’\\\]"
# 这里得到的是英文标点
# !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
print(string.punctuation)
pattern2 = "["+string.punctuation+"]"
text = "\某某,\\你好=+!123【我//""们】abc~————聊/天'吧::!这.!!_#??()个‘’“”¥$主|意()不错......!"
result = re.sub(pattern,"",text)
print(result)
result = re.sub(pattern2,"",result)
print(result)

email

1
2
email_pattern = '^[*#\u4e00-\u9fa5 a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$'
emails = re.findall(email_pattern, text, flags=0)

phone-number

1
2
3
# 抽取国内手机号码
cellphone_pattern = '^((13[0-9])|(14[0-9])|(15[0-9])|(17[0-9])|(18[0-9]))\d{8}$'
phoneNumbers = re.findall(cellphone_pattern, text, flags=0)

ip

1
(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)

complex

1
2
3
4
5
6
7
text = "0023苏宁(中国)ABC123有限公司A平台"
# 这里需要把开头的数字去掉^[0-9]*,结尾的‘A平台’固定字符串去掉 A平台$,有的字符串包含这些开头结尾,有些没有
# 中括号及内部字符串全去掉\\(.*?\\)|(.*?)
# 字符串内部仅保留中英文和数字[^\u4e00-\u9fa5A-Za-z0-9]
pattern = '^[0-9]*|A平台$|\\(.*?\\)|(.*?)|[^\u4e00-\u9fa5A-Za-z0-9]'
result = re.sub(pattern,"",text)
result = "苏宁ABC123有限公司"

对于上面以固定字符的需求,也可以用以下方法:

1
2
# texts: list of text
texts_new = [text[:-3] if text.endswith('A平台') else text for text in texts]

Reference

1、 https://github.com/cold-eye/funNLP

打赏

微信 微信 支付宝 支付宝
万分感谢