RegEx для извлечения числа из строки - PullRequest
0 голосов
/ 18 декабря 2009

У меня есть куча файлов в каталоге, в основном это что-то вроде ...

PO1000000100.doc или .pdf или .txt Некоторые из них - PurchaseOrderPO1000000109.pdf

Что мне нужно сделать, это извлечь часть PO1000000109. Так что в основном ПО с 10 номерами после него ... Как я могу сделать это с помощью регулярного выражения?

(То, что я сделаю, это цикл foreach для файлов в каталоге, получите имя файла и выполните его через регулярное выражение, чтобы получить номер заказа ...)

Я использую C # - не уверен, что это актуально.

Ответы [ 7 ]

2 голосов
/ 18 декабря 2009

Если часть заказа всегда одна и та же, вы можете просто получить номер, не используя регулярное выражение:

new string(theString.Where(c => char.IsDigit(c)).ToArray());

Позже вы можете добавить часть заказа вручную.

ПРИМЕЧАНИЕ : Я предполагаю, что в ваших строках есть только один ряд чисел. Например, если у вас есть "abc12345def678", вы получите "12345678", что может быть не тем, что вы хотите.

2 голосов
/ 18 декабря 2009

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

String data = 
  Regex.Match(@"PO\d{10}", "PurchaseOrderPO1000000109.pdf", 
    RegexOptions.IgnoreCase).Value;

Может добавить Regex.IsMatch с такими же переменными, что и ofc:)

1 голос
/ 18 декабря 2009
string data="PurchaseOrderPO1000000109.pdf\nPO1000000100.doc";
MatchCollection matches = Regex.Matches(data, @"PO[0-9]{10}");
foreach(Match m in matches){
    print(m.Value);
}

Результаты

PO1000000109
PO1000000100
1 голос
/ 18 декабря 2009

<code>
Regex.Replace(fileName, @"^.<em>?PO(\d{10}).</em>$", "$1");
Поместите звезды после точек.
0 голосов
/ 18 декабря 2009
var re = new System.Text.RegularExpressions.Regex("(?<=^PurchaseOrder)PO\\d{10}(?=\\.pdf$)");
Assert.IsTrue(re.IsMatch("PurchaseOrderPO1234567890.pdf"));
Assert.IsFalse(re.IsMatch("some PurchaseOrderPO1234567890.pdf"));
Assert.IsFalse(re.IsMatch("OrderPO1234567890.pdf"));
Assert.IsFalse(re.IsMatch("PurchaseOrderPO1234567890.pdf2"));
0 голосов
/ 18 декабря 2009

Возможное регулярное выражение может быть:

^.*(\d{10})\.\D{3}$
0 голосов
/ 18 декабря 2009

Этот RegEx заберет все числа из строки \d*.

Как описано здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...