Skip to content

Commit 9259058

Browse files
committed
Merge pull request VerbalExpressions#33 from A13xs/master
Add BeginCapture with a name of group and method to retrieve value captured.
2 parents 8a063e2 + f198779 commit 9259058

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

VerbalExpressions/VerbalExpressions.cs

+14
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,15 @@ public override string ToString()
103103
return PatternRegex.ToString();
104104
}
105105

106+
public string Capture(string toTest, string groupName)
107+
{
108+
if (!Test(toTest))
109+
return null;
110+
111+
var match=PatternRegex.Match(toTest);
112+
return match.Groups[groupName].Value;
113+
}
114+
106115
#endregion Helpers
107116

108117
#region Expression Modifiers
@@ -345,6 +354,11 @@ public VerbalExpressions BeginCapture()
345354
return Add("(", false);
346355
}
347356

357+
public VerbalExpressions BeginCapture(string groupName)
358+
{
359+
return Add("(?<", false).Add(groupName,true).Add(">",false);
360+
}
361+
348362
public VerbalExpressions EndCapture()
349363
{
350364
return Add(")", false);

VerbalExpressionsUnitTests/CaptureTests.cs

+19
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,25 @@ public void BeginCaptureAndEndCapture_DuplicatesIdentifier_DoesMatch() {
3838
// Assert
3939
Assert.AreEqual( @"(\w+)\s(\1)", verbEx.ToString() );
4040
Assert.IsTrue( verbEx.Test( TEST_STRING ), "There is no duplicates in the textString." );
41+
}
42+
43+
[Test]
44+
public void BeginCaptureWithName_CreateRegexGroupNameAsExpected()
45+
{
46+
// Arrange
47+
VerbalExpressions verbEx = VerbalExpressions.DefaultExpression;
48+
49+
// Act
50+
verbEx.Add("COD")
51+
.BeginCapture("GroupNumber")
52+
.Any("0-9")
53+
.RepeatPrevious(3)
54+
.EndCapture()
55+
.Add("END");
56+
57+
// Assert
58+
Assert.AreEqual( @"COD(?<GroupNumber>[0-9]{3})END",verbEx.ToString());
59+
Assert.AreEqual( "123", verbEx.Capture("COD123END","GroupNumber"));
4160
}
4261
}
4362

0 commit comments

Comments
 (0)