2015-05-20 2 views
0

У меня есть C# регулярное выражение для имен авторов в текстовом документе, который записывается в виде:Использование Regex для извлечения части строки из HTML/текстового файла

"author":"AUTHOR'S NAME" 

Регулярное выражение выглядит следующим образом:

new Regex("\"author\":\"[A-Za-z0-9]*\\s?[A-Za-z0-9]*") 

Это возвращает "author":"AUTHOR'S NAME. Тем не менее, я не хочу показывать кавычки или слово Author. Я просто хочу имя.

Может ли кто-нибудь помочь мне получить ожидаемое значение, пожалуйста?

+1

Можете ли вы разместить содержание автора, как оно отображается в текстовом документе? – DGibbs

+0

Несвязанный, но ваше выражение соответствует только подмножеству имен. Он не допускает каких-либо специальных символов, таких как '' 'в' O'Connor', ​​и он допускает только одно пространство, не дефисы, никакие иностранные символы и т. Д. Я не знаю вашего usecase, но если вы знайте, что имя автора будет заключено в кавычки, вам нужно будет просто принять что-либо, что не является двойной кавычкой: '\" author \ ": \" ([^ \ "] +) \" '. –

+0

Спасибо, Дэвид. Хороший момент, который я не рассматривал. Гиббс, имя автора появится после текста, который мне удалось найти в кавычках, как показано выше. –

ответ

3

Используйте группы регулярных выражений, чтобы получить часть строки. () действует как группа захвата и может получить доступ к полю .Groups.

.Groups[0] соответствует целой веренице

.Groups[1] соответствует первой группе (и так далее)

string pattern = "\"author\":\"([A-Za-z0-9]*\\s?[A-Za-z0-9]*)\""; 
var match = Regex.Match("\"author\":\"Name123\"", pattern); 
string authorName = match.Groups[1]; 
0

Вы также можете использовать Осмотреться подход только получить значение матча:

var txt = "\"author\":\"AUTHOR'S NAME\""; 
var rgx = new Regex(@"(?<=""author"":"")[^""]+(?="")"); 
var result = rgx.Match(txt).Value; 

Мое регулярное выражение дает 555,020 итераций в секунду с этой входной строкой, чего должно быть достаточно.

result будет AUTHOR'S NAME.

(?<="author":") проверяет, есть ли у нас "author":" перед матчем, [^"]+ выглядит безопасным, так как вы только хотите, чтобы соответствовать и алфавитно-цифровому пространству между кавычками, и (?=") проверяет косую котировку.

+0

Работает ли это для вас или вам нужно больше помогите? –

+0

Не на моем компьютере прямо сейчас, сообщит вам, когда я буду. –

+0

Жаль, что у вас есть время, чтобы проверить мой подход? BTW, если могут быть пробелы вокруг ':', мы можем улучшить внешний вид, позади как '@" (? <= "" author "" \ s *: \ s * "") [^ ""] + (? = "") ". –

Смежные вопросы