首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >通过正则表达式获取匹配子字符串

通过正则表达式获取匹配子字符串
EN

Stack Overflow用户
提问于 2018-12-05 06:06:16
回答 2查看 50关注 0票数 -2

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

给出一个像NAMEtony smithNUMBER100ADDRESSLAS vegas这样的输入字符串,

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

我试着使用正则表达式

代码语言:javascript
复制
(NAME([A-Za-z0-9\s]{1,}))?(NUMBER(([A-Za-z0-9\s]{1,}))?(ADDRESS([A-Za-z0-9\s]{1,}))?

去找匹配的,但它不工作。有人能帮上忙吗?

EN

回答 2

Stack Overflow用户

发布于 2018-12-05 08:51:28

从您的正则表达式来看,您的数据中似乎不能包含<>。它可以让你的数据更容易解析:

代码语言:javascript
复制
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": ...
    ...
    }
}
票数 0
EN

Stack Overflow用户

发布于 2018-12-05 12:30:23

这对输入字符串的所有三种情况都有效。

优点:非常简单的正则表达式。

缺点:在if语句中手动设置变量的值。

代码语言:javascript
复制
var input = "NAMEtony smithNUMBER100ADDRESSLAS vegas";
//var input = "ADDRESSLAS vegasNAMEtony smithNUMBER100";
//var input = "NUMBER100NAMEtony smith";

var pattern = "(?'field'NAME|NUMBER|ADDRESS)(?'value'.+?)(?=NAME|NUMBER|ADDRESS|$)";
var matches = Regex.Matches(input, pattern);

string name = null;
string number = null;
string address = null;

foreach (Match m in matches)
{
    var field = m.Groups["field"].Value;
    var value = m.Groups["value"].Value;

    if (field == "NAME")
        name = value;
    else if (field == "NUMBER")
        number = value;
    else if (field == "ADDRESS")
        address = value;
}
Console.WriteLine(name);
Console.WriteLine(number);
Console.WriteLine(address);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53622148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档