[英]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.