用正则表达式提取所有的姓名和电话号码 s = '''张三,手机号码13945677880 李四,手机号码18943128775 王五,手机号码17733219578'''
时间: 2024-11-11 21:30:08 浏览: 20
使用正则表达式从给定的字符串`s`中提取姓名和电话号码可以依据一定的模式,通常中国姓名一般由汉字组成,而电话号码通常以数字为主,中间可能会有破折号(-)或空格分隔。下面是一个示例:
```python
import re
s = '''
张三,手机号码13945677880
李四,手机号码18943128775
王五,手机号码17733219578
'''
# 假设姓名总是位于手机号码前,且手机号码格式为三位数+破折号+四位数+破折号+四位数
name_pattern = r'(\w+)\,' # 匹配名字,\w 表示字母、数字或下划线
phone_pattern = r'(\d{3}-\d{4}-\d{4})' # 匹配电话号码
names = re.findall(name_pattern, s)
phones = re.findall(phone_pattern, s)
names = [name.strip() for name in names] # 去除逗号
phones = [phone.replace(',', '').replace('-', '') for phone in phones] # 去除分隔符
print("姓名:", names)
print("电话号码:", phones)
```
注意,这个正则表达式假设了电话号码的标准格式,实际应用中需要根据实际情况调整。
相关问题
java用正则表达式和集合提取访问信息里的中文名
在Java中,你可以使用正则表达式配合集合(如ArrayList、Pattern和Matcher)来从字符串中提取访问信息中的中文名字。首先,需要定义一个正则模式来匹配中文字符,因为汉字通常由两个连续的Unicode编码组成。以下是一个简单的例子:
```java
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String text = "访问者:张三 李四 王五";
// 正则表达式模式,匹配中文字符,这里假设每个中文名字都由两个连续的全角汉字表示
Pattern pattern = Pattern.compile("\\u4e00\\u8def\\u4e00\\u8def");
Matcher matcher = pattern.matcher(text);
List<String> names = new ArrayList<>();
while (matcher.find()) {
names.add(matcher.group());
}
System.out.println("提取到的中文名字:");
for (String name : names) {
System.out.println(name);
}
}
}
```
在这个例子中,`"\u4e00\u8def"`代表一个汉字,`\u4e00`是汉字的第一个Unicode值,`\u8def`是第二个。正则表达式`"\u4e00\u8def\u4e00\u8def"`会匹配连续的两个汉字。
通过正则表达式获取字符串中的姓名
这个问题比较复杂,因为姓名的格式有很多种,例如:“张三”、“张三丰”、“李四·王五”、“李四·王五·赵六”等等。不同的姓名格式需要不同的正则表达式来匹配。
以下是几个常见的姓名格式及其对应的正则表达式:
1. 姓名只有两个汉字,没有别的符号:
```
^[\u4e00-\u9fa5]{2}$
```
2. 姓名有两个以上的汉字,没有别的符号:
```
^[\u4e00-\u9fa5]{2,}$
```
3. 姓名中间有一个“·”符号,表示两个字的姓氏:
```
^[\u4e00-\u9fa5]{1,2}·[\u4e00-\u9fa5]{1,}$
```
4. 姓名中间有一个“·”符号,表示三个字的姓氏:
```
^[\u4e00-\u9fa5]{2,3}·[\u4e00-\u9fa5]{1,}$
```
5. 姓名中间有两个“·”符号,表示三个字的姓氏:
```
^[\u4e00-\u9fa5]{1,2}·[\u4e00-\u9fa5]{1}·[\u4e00-\u9fa5]{1,}$
```
6. 姓名中间有两个“·”符号,表示四个字的姓氏:
```
^[\u4e00-\u9fa5]{2,3}·[\u4e00-\u9fa5]{1}·[\u4e00-\u9fa5]{1,}$
```
需要注意的是,以上正则表达式只适用于中文姓名,对于其他语言的姓名需要另外编写正则表达式。同时,以上正则表达式也存在一定的局限性,可能无法匹配某些复杂的姓名格式。
阅读全文