2012-04-02 2 views
0

Я пытаюсь выяснить, какое регулярное выражение будет соответствовать именам файлов в кавычках. Например.Регулярное выражение для соответствия имени файла

blah blah rubarb "someFile.txt" blah 
rubard "anotherFile.txt" blah blah 

Я хотел бы, чтобы соответствовать

someFile.txt 
anotherFile.txt 

Я использую .NET. Сейчас я просматриваю документацию, но любая помощь очень ценится.

+0

Почему использовать 'Regex' для этого? Похоже, 'string.Split' будет работать красиво. – Oded

+0

@Oded Мне хотелось бы увидеть код :) –

+1

@the_joric - Что? 'myString.Split ('' ') [1]'? – Oded

ответ

2

Это будет соответствовать не-пробельных символов плюс 3-4 расширение символов в имени файла.

\"(\S+\.\w{3,4})\" 
+0

@ MylesMcDonnell - имейте в виду, что это регулярное выражение включает '' '' s в матче – Robbie

+0

@MylesMcDonnel, он также не будет соответствовать файлам с расширениями из 2 символов или более 4 символов. Таким образом, 'myfile.cs' не будет соответствовать, и ни один из них не будет' myfile.csproj' – Robbie

+0

Чтобы включить файлы с не менее чем двумя символами или числом от 2 до n символов в расширении, можно использовать '\ w {2,}'. Чтобы включить файлы с не менее чем 1 символом в расширении, можно использовать '\ w +'. – Coder

1

Попробуйте это:

\"(\w+\.\w+)\" 

Подсказка: Помните, чтобы избежать \ сек ...

5

попробовать это:

(?<=")\w+\.\w+(?=") 

Это не будет включать цитаты в матче.

ПРИМЕЧАНИЕ. Я сделал одно предположение с этим регулярным выражением. Я предполагаю, что имя файла будет содержать только один символ .. Таким образом, my.file.txt не будет соответствовать. Если вам это нужно, дайте мне знать, и я обновлю его.

Ниже показано, как использовать это в коде C# для повторения всех совпадений.

try { 
    Regex regexObj = new Regex(@"(?<="")\w+\.\w+(?="")"); 
    Match matchResults = regexObj.Match(subjectString); 
    while (matchResults.Success) { 
     // matched text: matchResults.Value 
     // match start: matchResults.Index 
     // match length: matchResults.Length 
     matchResults = matchResults.NextMatch(); 
    } 
} catch (ArgumentException ex) { 
    // Syntax error in the regular expression 
} 

и вот некоторые комментарии, которые помогут вам понять:

@" 
(?<= # Assert that the regex below can be matched, with the match ending at this position (positive lookbehind) 
    ""  # Match the character “""” literally 
) 
\w  # Match a single character that is a “word character” (letters, digits, and underscores) 
    +  # Between one and unlimited times, as many times as possible, giving back as needed (greedy) 
\.  # Match the character “.” literally 
\w  # Match a single character that is a “word character” (letters, digits, and underscores) 
    +  # Between one and unlimited times, as many times as possible, giving back as needed (greedy) 
(?=  # Assert that the regex below can be matched, starting at this position (positive lookahead) 
    ""  # Match the character “""” literally 
) 
" 
Смежные вопросы