Reputation:
I have the following code that works, but would like to edit it up using LINQ
to find if any of the Regex
search strings are in the target.
foreach (Paragraph comment in
wordDoc.MainDocumentPart.Document.Body.Descendants<Paragraph>().Where<Paragraph>(comment => comment.InnerText.Contains("cmt")))
{
//print values
}
More precisely I have to select through LINQ
if the string start with letters or start with symbols -
or •
This Regex
is correct for my case ?
string pattern = @"^[a-zA-Z-]+$";
Regex rg = new Regex(pattern);
Any suggestion please?
Thanks in advance for any help
Upvotes: 4
Views: 2205
Reputation: 626903
Your regex should be modified as
^[\p{L}•-]
To also allow whitespace at the start of the string add \s
and use
^[\p{L}\s•-]
Details
^
- start of string[\p{L}•-]
- a letter, •
or -
[\p{L}•-]
- a letter, whitespace, •
or -
In C#, use
var reg = new Regex(@"^[\p{L}•-]");
foreach (Paragraph comment in
wordDoc.MainDocumentPart.Document.Body.Descendants<Paragraph>()
.Where<Paragraph>(comment => reg.IsMatch(comment.InnerText)))
{
//print values
}
If you want to match those items containing cmt
and also matching this regex, you may adjust the pattern to
var reg = new Regex(@"^(?=.*cmt)[\p{L}\s•-]", RegexOptions.Singleline);
If you need to only allow cmt
at the start of the string:
var reg = new Regex(@"^(?:cmt|[\p{L}\s•-])");
Upvotes: 0
Reputation: 26372
You can. It would be better to use query syntax though, as described here: https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/linq/how-to-combine-linq-queries-with-regular-expressions
Example:
var queryMatchingFiles =
from file in fileList
where file.Extension == ".htm"
let fileText = System.IO.File.ReadAllText(file.FullName)
let matches = searchTerm.Matches(fileText)
where matches.Count > 0
select new
{
name = file.FullName,
matchedValues = from System.Text.RegularExpressions.Match match in matches
select match.Value
};
Your pattern is fine, just remove the $
from the end and add any character
@"^[a-zA-Z-]+. *"
Upvotes: 1