nanoFramework.System.Text.RegularExpressions 1.1.80

Prefix Reserved
dotnet add package nanoFramework.System.Text.RegularExpressions --version 1.1.80                
NuGet\Install-Package nanoFramework.System.Text.RegularExpressions -Version 1.1.80                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="nanoFramework.System.Text.RegularExpressions" Version="1.1.80" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add nanoFramework.System.Text.RegularExpressions --version 1.1.80                
#r "nuget: nanoFramework.System.Text.RegularExpressions, 1.1.80"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install nanoFramework.System.Text.RegularExpressions as a Cake Addin
#addin nuget:?package=nanoFramework.System.Text.RegularExpressions&version=1.1.80

// Install nanoFramework.System.Text.RegularExpressions as a Cake Tool
#tool nuget:?package=nanoFramework.System.Text.RegularExpressions&version=1.1.80                

Quality Gate Status Reliability Rating License NuGet #yourfirstpr Discord

nanoFramework logo


Welcome to the .NET nanoFramework System.Text.RegularExpressions repository

Build status

Component Build Status NuGet Package
System.Text.RegularExpressions Build Status NuGet

Important: This Regular Expressions parser will cover most of your needs. It has some limitation when the pattern is complex and not a full compatibility. This is an on going work, mainly built on the .NET Microframework implementation. Please do not hesitate to raise any issue if any issue. Also, any help to improve this parser it's more than welcome.

In the Tests you will find advance tests, so far only one is failing. Help to fix the parser needed!

Usage

The level of compatibility with the full framework is high. The Match, Group classes are working as you can expect. The following examples gives an idea of the usage:

// The example displays the following output:
//       Match: This is one sentence.
//          Group 1: 'This is one sentence.'
//             Capture 1: 'This is one sentence.'
//          Group 2: 'sentence'
//             Capture 1: 'This '
//             Capture 2: 'is '
//             Capture 3: 'one '
//             Capture 4: 'sentence'
//          Group 3: 'sentence'
//             Capture 1: 'This'
//             Capture 2: 'is'
//             Capture 3: 'one'
//             Capture 4: 'sentence'
string pattern = @"(\b(\w+?)[,:;]?\s?)+[?.!]";
string input = "This is one sentence. This is a second sentence.";

Match match = Regex.Match(input, pattern);
Debug.WriteLine("Match: " + match.Value);
int groupCtr = 0;
foreach (Group group in match.Groups)
{
    groupCtr++;
    Debug.WriteLine("   Group " + groupCtr + ": '" + group.Value + "'");
    int captureCtr = 0;
    foreach (Capture capture in group.Captures)
    {
        captureCtr++;
        Debug.WriteLine("      Capture " + captureCtr + ": '" + capture.Value + "'");
    }
}

Another example using Split:

regex = new Regex("[ab]+");
acutalResults = regex.Split("xyzzyababbayyzabbbab123");
for (int i = 0; i < acutalResults.Length; i++)
{
    Debug.WriteLine($"{acutalResults[i]}");
}
// The results will be:
// xyzzy
// yyz
// 123

You can as well use the Replace function:

regex = new Regex("a*b");
actual = regex.Replace("aaaabfooaaabgarplyaaabwackyb", "-");
Debug.WriteLine($"{actual}");
regex = new Regex("([a-b]+?)([c-d]+)");
actual = regex.Replace("zzabcdzz", "$1-$2");
Debug.WriteLine($"{actual}");
// The result will be:
// -foo-garply-wacky-
// zzab-cdzz

The next example shows the possibility to use options:

regex = new Regex("abc(\\w*)");
Debug.WriteLine("RegexOptions.IgnoreCase abc(\\w*)");
regex.Options = RegexOptions.IgnoreCase;
if (regex.IsMatch("abcddd"))
{
    Debug.WriteLine("abcddd = true");
}
regex = new Regex("^abc$", RegexOptions.Multiline);
if (regex.IsMatch("\nabc"))
{
    Debug.WriteLine("abc found!");
}
// The result will be:
// abcddd = true
// abc found!

Validated regular expressions

You'll find in the tests some regular expressions used. Those can be useful:

  • email addresses: ([\w\d_.\-]+)@([\d\w\.\-]+)\.([\w\.]{2,5})
  • http(s) URL: (https?:\/\/)([\da-z-._]+)/?([\/\da-z.-]*) (limitation: URL has to finish with a / to be properly extracted, this is a bug into our engine, it works perfectly with the expression between ^ and $)
  • MD5: [a-f0-9]{32}
  • SHA256: [A-Fa-f0-9]{64}
  • Simple XML tag: <tag>[^<]*</tag>
  • GUID: [{]?[0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}[}]?
  • Date time like 2021-04-10 18:08:42: (\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})

Known limitations

This parser is a simple one, some of those elements are not supported:

  • Expressions like (?<word>\w+) will not work. While groups are supported, the ? in front of a named group or element is not supported.
  • For some characters, when using the escaped version like \. you may encounter issues, just use . instead.
  • Sometimes the order of the characters may have an impact. If you are in this case, try to change the order in a character class like [a-z-._]

Feedback and documentation

For documentation, providing feedback, issues and finding out how to contribute please refer to the Home repo.

Join our Discord community here.

Credits

The list of contributors to this project can be found at CONTRIBUTORS.

License

The nanoFramework Class Libraries are licensed under the MIT license.

Please check the header of the files in this repository, some of the code is under Apache License 2.0.

Code of Conduct

This project has adopted the code of conduct defined by the Contributor Covenant to clarify expected behaviour in our community. For more information see the .NET Foundation Code of Conduct.

.NET Foundation

This project is supported by the .NET Foundation.

Product Compatible and additional computed target framework versions.
.NET Framework net is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (2)

Showing the top 2 NuGet packages that depend on nanoFramework.System.Text.RegularExpressions:

Package Downloads
DevBot9.NanoFramework.Homie

Homie implementation for nanoFramework.

DevBot9.NanoFramework.Homie.Utilities

Homie implementation for nanoFramework.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.1.80 129 9/27/2024
1.1.51 506 11/9/2023
1.1.37 787 12/28/2022
1.1.26 507 10/26/2022
1.1.24 402 10/25/2022
1.1.22 391 10/24/2022
1.1.20 434 10/23/2022
1.1.14 473 9/16/2022
1.1.9 545 8/11/2022
1.1.7 493 6/10/2022
1.1.3 445 5/2/2022
1.0.5-preview.3 181 1/4/2022
1.0.4 341 12/3/2021
1.0.4-preview.16 150 12/3/2021
1.0.4-preview.14 145 12/3/2021
1.0.4-preview.12 146 12/2/2021
1.0.4-preview.10 151 12/2/2021
1.0.4-preview.8 141 12/2/2021
1.0.4-preview.1 171 8/2/2021
1.0.3 346 8/2/2021
1.0.3-preview.4 169 8/2/2021
1.0.2 1,099 7/16/2021
1.0.0-preview.33 190 7/16/2021
1.0.0-preview.28 187 6/1/2021
1.0.0-preview.24 179 4/10/2021
1.0.0-preview.22 157 3/31/2021
1.0.0-preview.21 196 3/26/2021
1.0.0-preview.20 202 3/26/2021