Попробуйте этот IntentChooser . Просто добавьте несколько строк кода, я сделал для вас все остальное.
private void startImageChooserActivity() {
Intent intent = ImageChooserMaker.newChooser(MainActivity.this)
.add(new ImageChooser(true))
.create("Select Image");
startActivityForResult(intent, REQUEST_IMAGE_CHOOSER);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_IMAGE_CHOOSER && resultCode == RESULT_OK) {
List imageUris = ImageChooserMaker.getPickMultipleImageResultUris(this, data);
}
}
PS: как указано в ответах выше, EXTRA_ALLOW_MULTIPLE доступен только для API> = 18. И некоторые приложения для галерей не делают эту функцию доступной (Google Photos and Documents (com.android.documentsui
) работа.
У меня был ограниченный успех при разработке шаблонов регулярных выражений по критериям НЕ, но у меня было лучше разумного успеха с удалением того, чего я не хочу, до фактического соответствия шаблона регулярного выражения.
Function freeNums(str As String)
Dim i As Long
Static rgx As Object
'prep a return error if no match
freeNums = CVErr(xlErrNA)
'only create the object if it has never been used before
If rgx Is Nothing Then
Set rgx = CreateObject("VBScript.RegExp")
End If
'deal with the root string first and remove what we don't want to match
'pattern for 0-9 one to nine digits in length enclosed in brackets
rgx.Pattern = "\([0-9]{1,9}\)"
'numbers in brackets removed
str = rgx.Replace(str, vbNullString)
'now look for what we actually want
'pattern for 0-9 one to nine digits in length
rgx.Pattern = "[0-9]{1,9}"
If rgx.Test(str) Then
freeNums = rgx.Execute(str).Item(0)
End If
End Function
Обратите внимание, что для сохранения начального нуля результат возвращается как текст. По умолчанию это выравнивание по умолчанию для текста. В конечном итоге было бы лучше вернуть результат как истинное число и форматировать ячейку как 00000
.
Вы можете попробовать /([0-9]{2,})(?![^\(]*\))/g
.
Вторая часть не будет соответствовать вашему первоначальному шаблону, если она заключена в скобки.
"([0-9]{2,})(?![^\(]*\))"
Глобальное свойство задается отдельно в коде.
– Ron Rosenfeld
13 July 2018 в 10:14
Я знаю, это боль, но я не могу рекомендовать вас достаточно, чтобы делать ваши исследования регулярными выражениями. Я являюсь человеком вроде C #, JS, поэтому это не проверено в VBA, но должно быть довольно хорошей отправной точкой:
Что вы хотите:
\d+(?!\()
не пропустите раздел «edit»
Объяснение:
\d+
Это просто соответствует номерам. Вы можете сопоставить диапазон (со ссылкой на таблицу asci) символов в [], вы можете использовать [1-9], но есть ярлык для цифры «\ d». Вы хотите, чтобы все числа в строке отображались по крайней мере один раз , Вы можете сделать это, используя {minimum, maximum}, который был бы {1,}, но также есть ярлык для этого символа "+", означающий, по крайней мере, один раз.
(?<!\()
Отрицательный Lookbehind - говорит, что вы хотите совпадение без этого префикса, а не в том числе - вот что выглядит вокруг. Этот ищет файл (, который вам нужно сбежать) \ ("
(?<= )
Положительный Lookbehind - делает ли что-то противоположное, ищет совпадения с префиксом префикса, не включенным в совпадение. Это ищут пустое пространство.
(?= )
Positive Lookahead - Единственное отличие состоит в том, что это выглядит в обратном направлении, а это означает, что он ищет постышки, не входящие в совпадение. снова ищет пустое пространство.
(?! )
Отрицательный Lookahead - я думаю, что вы получите его в этот момент, он делает то же самое, что и предыдущее, но отрицает. Конечно, не включен в окончательное соответствие.
Наконец, вы можете использовать
\d+(?= )(?!\()
так же, как показано в примере, который вы предоставили, но это зависит от формата строки.
EDIT: мне было сообщено QHarr, что VBA очень неудобен в lookbehinds, но поддерживает lookahead. Я меняю свое решение из
(?<!\()(?<= )\d+(?= )(?!\()
TO
\d+(?= )(?!\()
EDIT2:
Я изменил решение снова из
\d+(?= )(?!\()
TO
\d+(?!\()
Поскольку, как предположил Рон Розенфельд, это решение не будет достаточно общим для «соответствия первому купе, который не находится в круглых скобках». проблема в том, что он не будет соответствовать числу в конце строки, из-за положительного взгляда на поиск пространства.