qq_41890695 2023-03-05 17:02 采纳率: 100%
浏览 127
已结题

不规则的表格怎么分出名字电话和地址?

一个单元格里面包含全部信息,杂 乱无章的表格,如果名字包含字母和网名呢?麻烦解答详细一点,最好举个例子,谢谢

img

  • 写回答

8条回答 默认 最新

  • dahe0825 2023-03-05 17:10
    关注

    参考GPT的内容和自己的思路,对于不规则的表格,要分出名字、电话和地址,需要先确定这三个字段的特征。一般情况下,名字通常是中文字符,电话通常是数字和符号组成,地址通常包含中文、数字、字母和符号。在代码实现时,可以利用正则表达式来匹配这三个字段的特征。

    下面是一份用 C 语言实现的示例代码,可以实现对不规则表格中的名字、电话和地址进行提取:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <regex.h>
    
    #define MAX_LINE_LENGTH 1024
    #define MAX_MATCHES 10
    
    int main() {
        char line[MAX_LINE_LENGTH];
        regex_t regex;
        regmatch_t matches[MAX_MATCHES];
        int reti;
        const char *pattern_name = "[\u4e00-\u9fa5]+";
        const char *pattern_phone = "[0-9()-]+";
        const char *pattern_address = "[\u4e00-\u9fa5A-Za-z0-9()-]+";
    
        reti = regcomp(&regex, pattern_name, REG_EXTENDED);
        if (reti) {
            fprintf(stderr, "Could not compile regex\n");
            exit(EXIT_FAILURE);
        }
    
        while (fgets(line, MAX_LINE_LENGTH, stdin) != NULL) {
            reti = regexec(&regex, line, MAX_MATCHES, matches, 0);
            if (reti == 0) {
                printf("Name: %.*s\n", (int)(matches[0].rm_eo - matches[0].rm_so), &line[matches[0].rm_so]);
            }
    
            reti = regcomp(&regex, pattern_phone, REG_EXTENDED);
            if (reti) {
                fprintf(stderr, "Could not compile regex\n");
                exit(EXIT_FAILURE);
            }
    
            reti = regexec(&regex, line, MAX_MATCHES, matches, 0);
            if (reti == 0) {
                printf("Phone: %.*s\n", (int)(matches[0].rm_eo - matches[0].rm_so), &line[matches[0].rm_so]);
            }
    
            reti = regcomp(&regex, pattern_address, REG_EXTENDED);
            if (reti) {
                fprintf(stderr, "Could not compile regex\n");
                exit(EXIT_FAILURE);
            }
    
            reti = regexec(&regex, line, MAX_MATCHES, matches, 0);
            if (reti == 0) {
                printf("Address: %.*s\n", (int)(matches[0].rm_eo - matches[0].rm_so), &line[matches[0].rm_so]);
            }
        }
    
        regfree(&regex);
        return 0;
    }
    
    
    

    上述代码通过 fgets 逐行读取输入的表格,然后依次使用三个正则表达式进行匹配,分别匹配名字、电话和地址字段。其中,正则表达式的内容分别存储在 pattern_name、pattern_phone 和 pattern_address 中。匹配成功后,代码将匹配到的字段和对应的内容输出。

    回答不易,还请能采纳!!!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

问题事件

  • 系统已结题 3月19日
  • 已采纳回答 3月11日
  • 修改了问题 3月6日
  • 修改了问题 3月5日
  • 展开全部

悬赏问题

  • ¥15 从Freecad中宏下载的DesignSPHysics,出现如下问题是什么原因导致的(语言-python)
  • ¥30 notepad++ 自定义代码补全提示
  • ¥15 MATLAB有限差分法解一维边值问题
  • ¥200 内网渗透测试 横向渗透 Windows漏洞 Windows权限维持
  • ¥15 数据结构图的相关代码实现
  • ¥15 python中aiohttp.client_exceptions.ContentTypeError
  • ¥30 DeepLung肺结节检测生成最大froc值对应的epoch报错
  • ¥15 信号发生器如何将频率调大,步尽值改成10
  • ¥15 keil 5 编程智能家具,风扇台灯开关,人体感应等
  • ¥100 找一名渗透方面的专家