Если вы хотите извлечь только положительные целые числа, попробуйте следующее:
>>> str = "h3110 23 cat 444.4 rabbit 11 2 dog"
>>> [int(s) for s in str.split() if s.isdigit()]
[23, 11, 2]
Я бы сказал, что это лучше, чем пример регулярного выражения по трем причинам. Во-первых, вам не нужен другой модуль; во-вторых, это более читаемо, потому что вам не нужно разбирать мини-язык регулярных выражений; и, в-третьих, он быстрее (и, скорее всего, более pythonic):
python -m timeit -s "str = 'h3110 23 cat 444.4 rabbit 11 2 dog' * 1000" "[s for s in str.split() if s.isdigit()]"
100 loops, best of 3: 2.84 msec per loop
python -m timeit -s "import re" "str = 'h3110 23 cat 444.4 rabbit 11 2 dog' * 1000" "re.findall('\\b\\d+\\b', str)"
100 loops, best of 3: 5.66 msec per loop
Это не будет распознавать поплавки, отрицательные целые числа или целые числа в шестнадцатеричном формате. Если вы не можете принять эти ограничения, ответ slim ниже выполнит трюк.
использовать Laravel scopes()
таким образом, вы можете легко использовать красноречивый синтаксис.
$user = new User::customQuery();
public function scopeSustomQuery($query)
{
$query = $query->where('You condition');
return $query;
}
попробуйте функцию whereRaw ()
https://laravel.com/docs/5.6/queries
Из документации:
Методы whereRaw и /WhereRaw могут использоваться для ввода предложения raw where в ваш запрос. Эти методы принимают необязательный массив привязок в качестве их второго аргумента:
$ orders = DB :: table ('orders') -> whereRaw ('price> IF (state = "TX",?, 100 ) ', [200]) -> get ();
Попробуйте это и никогда не используйте необработанные запросы в Laravel
/* @var User $query */
$user = new User();
/* @var Builder $query */
$query = $user->newQuery();
dd($query->select('*')->from('_users')->get());
DB::raw()
используется для создания произвольных команд SQL, которые больше не обрабатываются конструктором запросов. Проверьте это. link, с более подробной информацией: http://fideloper.com/laravel-raw-queriesПример из
DB::raw
иDB::select