首页 > 解决方案 > 通过正则表达式获取匹配的子字符串

问题描述

我有一个像这样的正则表达式问题,

给出一个输入字符串NAMEtony smithNUMBER100ADDRESSLAS vegas,如

输入字符串有多个用 标记的字段NAME, NUMBER, ADDRESS,这些字段可以是可选的,并且顺序不固定。(可以ADDRESSLAS vegasNAMEtony smithNUMBER100, or NUMBER100NAMEtony smith),

我试图使用正则表达式

(NAME([A-Za-z0-9\s]{1,}))?(NUMBER(([A-Za-z0-9\s]{1,}))?(ADDRESS([A-Za-z0-9\s]{1,}))?

得到匹配,但它不起作用。任何人都可以帮忙吗?

标签: c#

解决方案


从您的正则表达式看来,您的数据中没有<>。它允许您使您的数据更容易解析:

var text = "NAMEtony smithNUMBER100ADDRESSLAS vegas";
var escapedText =
    text.Replace("ADDRESS", "<ADDRESS>")
        .Replace("NAME", "<NAME>")
        .Replace("NUMBER", "<NUMBER>");
var dataFields = escapedText.Split('<'); // Now you have strings which look like "NAME>...."
foreach (var dataField in dataFields) {
    if (dataField == "") // Somehow handle empty string in the beginning
        continue;
    var splitted = dataField.Split('>');
    string field = splitted[0], data = splitted[1];

    switch (field) {
    case "NAME": ...
    ...
    }
}

推荐阅读