Каков “рубиновый путь” для парсинга строки для единственного ключа/значения?

В C ++ 11 вы можете использовать объемные перечисления , чтобы исправить это. Это удалит имена из глобальной области видимости и поместит их в имя перечисления.

enum class Identity
{
       UNKNOWN = 1,
       CHECKED = 2,
       UNCHECKED =3
};

enum class Status
{
       UNKNOWN = 0,
       PENDING = 1,
       APPROVED = 2,
       UNAPPROVED =3
};

int main ()
{
    Identity::UNKNOWN;
    Status::UNKNOW;
}

Живой пример kbd>

11
задан Michael Myers 22 May 2009 в 21:03
поделиться

4 ответа

Ваш код в значительной степени похож на Ruby. Если вы не хотите использовать глобальный $ 1 , вы можете использовать версию с двумя аргументами String # [] :

match = text[/your username is: (.*)/, 1]
22
ответ дан 3 December 2019 в 02:02
поделиться

Не уверен, что это больше Ruby'ish , но другой вариант:

>> text = "hello john\nyour username is: jj\nthanks for signing up\n"
>> text.match(/your username is: (.*)/)[1]
=> "jj"
4
ответ дан 3 December 2019 в 02:02
поделиться

Команда split невероятно полезна. Он делит строку на массив подстрок, разделяя все, что вы передаете. Если вы не дадите ей никаких аргументов, она разбивается на пробелы. Итак, если вы знаете, что слово, которое вы ищете, является пятым «словом» (разделение на пробелы и символ возврата), вы можете сделать это:

text = "hello john \ nваше имя пользователя: jj \ nспасибо за регистрация \ n "
match = text.split [5]

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

midline = text.split ("\ n") [1]
match = midline.split ("username is:") .last

Или, возможно, более кратко:

match = text [/ username is: (. *) /, 1]

6
ответ дан 3 December 2019 в 02:02
поделиться

There's also Regexp#match, which returns a MatchData object, which has all the information you could possibly want.

irb> match = /your username is: (.*)/.match "hello john\nyour username is: jj\nthanks for signing up\n"
#=> #<MatchData:0x557f94>
irb> match.pre_match
#=> "hello john\n"
irb> match.post_match
#=> "\nthanks for signing up\n"
irb> match[0]
#=> "your username is: jj"
irb> match[1]
#=> "jj"
3
ответ дан 3 December 2019 в 02:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: