дадена проста RegEx така: ^(d+D+d+)(.*)
и низ за разбор като 15-APR-2012 @ 11:00:00
с помощта на [$1]$2
добиви [15-APR-2012] @ 11:00:00
както се очаква.
Проблемът ми е, че се обаждам на Regex.Matches на това получавам един мач в индекс 0 и целия низ: 15-APR-2012 @ 11:00:00
се показва като съвпадение. Но наистина има 2 мача. Как мога да получа и двата мача? Трябва да видя индекс 0 и индекс 12. Кодът, който използвам, е от друга нишка:
// Get a collection of matches.
MatchCollection matches = Regex.Matches(inPutString, regexptrn);
foreach (Match match in matches)
{
foreach (Capture capture in match.Captures)
{
retVal += String.Format("Index={0}, Value={1}", capture.Index, capture.Value) + Environment.NewLine;
}
}
Имам ли грешна представа за това какво наистина прави?
ДОБРЕ. това е същия низ, нов regex "(..) (...)", който замества с [$ 1] {$ 2} резултати в [10] {- AU} [G -] {201} [2] {@ 1} [1:] {45:} 38 очакваме това.
Мачовете обаче дават следното:
Index=0, Value=10-AU
Index=5, Value=G-201
Index=10, Value=2 @ 1
Index=15, Value=1:45:
Това показва, че мачовете разглеждат целия модел, а НЕ неговите групи. Сега как да получим мачове от групата
Отговори:
1 за отговор № 1Има две причини, поради които настоящият регулярен израз никога не може да получи няколко съвпадения:
- Най-
^
в началото на вашия regex е котва към началото на низ, така че трябва да премахнете това, в противен случай regex може да съвпада само с индекс 0. - Най-
.*
в края на вашето regex ще съответства на останалата частот низа, и няма да намерите никакви припокриващи се съвпадения, така че да можете да съпоставите само веднъж. Тъй като въпреки това не правите нищо с втората група за заснемане, вероятно можете просто да изпуснете това от вашия regex.
... така че опитайте с regex (d+D+d+)
и замяна на съвпадения с [$1]
.