正则表达式入门
什么是正则表达式
正则表达式(Regular Expression,简称Regex或RegExp)是一种广泛应用于文本处理领域的表达式语言。它拥有强大的字符串匹配和搜索功能,能够高效地处理复杂的文本处理任务。在计算机科学和软件开发领域,正则表达式属于基本的技能之一。
正则表达式的基本语法
正则表达式主要由普通字符和元字符组成。普通字符代表字符本身,而元字符则表示一些特殊含义。其中,常见的元字符包括:
.
:匹配任意单个字符(除换行符外)*
:匹配零个或多个前面的元素+
:匹配一个或多个前面的元素?
:匹配零个或一个前面的元素[abc]
:匹配a、b或c中的任意一个字符[^abc]
:匹配除a、b、c以外的任意一个字符\d
:匹配一个数字字符\D
:匹配一个非数字字符\w
:匹配一个单词字符(字母、数字、下划线)\W
:匹配一个非单词字符\s
:匹配一个空白字符(空格、制表符、换行符等)\S
:匹配一个非空白字符^
:匹配字符串的开头$
:匹配字符串的结尾
正则表达式的应用场景
正则表达式可以应用于多种文本处理场景,例如:
1. 邮箱地址验证
import re
def check_email(email):
pattern = r'^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$'
return True if re.match(pattern, email) else False
2. 手机号码验证
function checkMobile(mobile) {
var pattern = /^1[3-9]\d{9}$/;
return pattern.test(mobile);
}
3. HTML标签替换
String html = "<p class=\"title\">Welcome to my website!</p>";
String pattern = "<.*?>";
String replacement = "";
String plainText = html.replaceAll(pattern, replacement);
System.out.println(plainText); // Welcome to my website!
4. 中文分词
import jieba
sentence = "自然语言处理技术是目前人工智能领域的重要研究方向之一"
words = jieba.lcut(sentence)
print(words) # ['自然语言', '处理', '技术', '是', '目前', '人工智能', '领域', '的', '重要', '研究', '方向', '之一']
实战练习
1. 判断一个字符串是否包含数字
def has_number?(str)
pattern = /\d/
!!pattern.match(str)
end
puts has_number?("hello world") #=> false
puts has_number?("hello 123") #=> true
2. 判断一个字符串是否为日期格式(YYYY-MM-DD)
function isValidDate(dateStr) {
var pattern = /^\d{4}-\d{2}-\d{2}$/;
if (!pattern.test(dateStr)) return false;
var date = new Date(dateStr);
if (isNaN(date.getTime())) return false;
return true;
}
console.log(isValidDate("2022-01-16")); // true
console.log(isValidDate("2022/01/16")); // false
3. 匹配一个字符串中的所有整数
import re
def find_integers(s):
pattern =r'\d+'
return re.findall(pattern, s)
print(find_integers("hello 123 world 456")) # ['123', '456']
4. 将网页中的图片链接替换为本地存储路径
String html = "<img src=\"http://example.com/image.jpg\">";
String pattern = "<img\\s+src=\"(http://.+?)\"";
String replacement = "<img src=\"/images/$1\"";
String localHtml = html.replaceAll(pattern, replacement);
System.out.println(localHtml); // <img src="/images/http://example.com/image.jpg">
结论
正则表达式是一种强大的文本处理工具,掌握它可以帮助我们高效地完成各种复杂文本处理任务。在实际应用中,我们需要根据具体情况选择正确的正则表达式模式,同时注意正确处理编码和转义问题。