繁体   English   中英

如何将字符串数组中的值传递给C#中的Regex

[英]How to pass values from a string array into a Regex in C#

我目前正在编写一个程序,它将检查文件中的一行,并查看该行中是否包含US状态,并且它也拼写正确。 我现在正在为一个州工作。 我希望能够看到美国所有州是否都在排队。

这是我到目前为止的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.IO;

namespace ConsoleApplication3
{
class Program
{
    static void Main(string[] args)
    {

        var r = new Regex(@"\bArizona\b", RegexOptions.IgnoreCase);
        string[] lines = File.ReadAllLines(@"C:\sampledata.dat");
        foreach (string s in lines)
        {
            var m = r.Match(s);
            Console.WriteLine(m.Success); // false
            Console.WriteLine(s);
            Console.ReadLine();
        }
    }
}
}

基本上我想做一些像var r = new Regex(@"\\bAll US States.txt\\b", RegexOptions.IgnoreCase);

如果你想查看是否包含任何状态,你基本上可以使用string.Join()方法生成一个匹配任何状态的表达式:

// Read your lines
var states = File.ReadAllLines(@"C:\states.txt");

// Build a pipe delimited string (e.g. State1|State2|State3 ...) to use an a Regex with necessary boundaries
// leading and trailing boundaries
var pattern = $@"\b{(string.Join("\b|\b", states))}\b";

// Now use that pattern to build a Regex to check against (using C# string interpolation)
var regex = new Regex(pattern, RegexOptions.IgnoreCase);

// Now loop through your data here and check each line
string[] lines = File.ReadAllLines(@"C:\sampledata.dat");
foreach (string s in lines)
{
        var m = regex.Match(s);
        Console.WriteLine(m.Success); // false
        Console.WriteLine(s);
        Console.ReadLine();
}

此外,如果您无法使用字符串插值来构建模式,只需使用较旧的string.Format()方法:

var pattern = string.Format("\b{0}\b", string.Join("\b|\b", states));

你正在寻找的正则表达式是

\b(?:Alabama|Alaska|Arizona|...)\b

要从存储在All US States.txt文件中的列表中All US States.txt它,请使用File.ReadAllLines

var states = File.ReadAllLines(@"All US States.txt");
var r = new Regex(string.Format(@"\b(?:{0})\b", string.Join("|", states)), RegexOptions.IgnoreCase);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM