Просто поместите строки const в область действия файла в файле реализации, анонимное пространство имен не обязательно ограничивать их использование только этим классом.
Стандарт C ++ 003 C.1.2 Раздел 3: основные понятия
Change: A name of file scope that is explicitly declared const, and not explicitly declared extern, has internal linkage, while in C it would have external linkage
Примечание. Анонимное пространство имен помогает уменьшить конфликты имен.
Вы близко.
Вы, вероятно, просто хотите:
foreach (Match match in Regex.Matches(input, @"^\d+"))
{
return int.Parse(match.Value);
}
Вот полный пример. Он вызовет исключение, если вы не укажете ему действительную строку - вы можете изменить это поведение, не выбрасывая явным образом исключение в ParseInteger
, а вместо этого используя int.TryParse
.
Обратите внимание, что он также позволяет использовать начальный знак -, но не +. (Опять же, легко изменить.)
Также обратите внимание, что, хотя у меня есть три тестовых примера для успешных ситуаций, у меня нет тестовых примеров для отказа.
Наконец, он не будет соответствовать «abc123def» . Если хотите, удалите ^ из регулярного выражения.
using System;
using System.Text;
using System.Text.RegularExpressions;
class Test
{
static void Main(string[] args)
{
Check("1234abc", 1234);
Check("-12", -12);
Check("123abc456", 123);
}
static void Check(string text, int expected)
{
int actual = ParseInteger(text);
if (actual != expected)
{
Console.WriteLine("Expected {0}; got {1}", expected, actual);
}
}
private static readonly Regex LeadingInteger = new Regex(@"^(-?\d+)");
static int ParseInteger(string item)
{
Match match = LeadingInteger.Match(item);
if (!match.Success)
{
throw new ArgumentException("Not an integer");
}
return int.Parse(match.Value);
}
}
Небольшое изменение в отличном решении Джона Скита необходимо.
Я бы изменил регулярное выражение на (как упомянул Джон):
@ "^ ([^ \ d] +)? (+ | -)? \ d + "
Это позволяет использовать начальные символы перед первым появлением цифры
(например, asb12354
-> 12354
) и оба случая целых чисел со знаком (например, +
или -
)
public static int ParseInteger( object oItem )
{
int iItem = 0;
if (oItem != null) {
Int32.TryParse( Regex.Match( oItem.ToString(), @"\d+" ).Value, out iItem );
}
return iItem;
}
Вы можете использовать это регулярное выражение ("\ A \ d +") для поиска чисел в начале строки.
Затем вы можете использовать int.Parse () для преобразования этой строки в действительное целое число.