Это помогает мне:
private func urlRequestWithComponentsForUploadMultipleImages(urlString:String, parameters:Dictionary<String, String>, imagesData:[Data], imageName: String) -> (URLRequestConvertible , Data) {
// create url request to send
var mutableURLRequest = URLRequest(url: NSURL(string: urlString)! as URL)
mutableURLRequest.httpMethod = Alamofire.HTTPMethod.post.rawValue
let boundaryConstant = "myRandomBoundary12345";
let contentType = "multipart/form-data;boundary="+boundaryConstant
mutableURLRequest.setValue(contentType, forHTTPHeaderField: "Content-Type")
// create upload data to send
var uploadData = Data()
// add image
for data in imagesData {
uploadData.append("\r\n--\(boundaryConstant)\r\n".data(using: String.Encoding.utf8)!)
uploadData.append("Content-Disposition: form-data; name=\"\(imageName)\"; filename=\"\(Date().timeIntervalSince1970).jpeg\"\r\n".data(using: String.Encoding.utf8)!)
uploadData.append("Content-Type: image/jpeg\r\n\r\n".data(using: String.Encoding.utf8)!)
uploadData.append(data)
}
// add parameters
for (key, value) in parameters {
uploadData.append("\r\n--\(boundaryConstant)\r\n".data(using: String.Encoding.utf8)!)
uploadData.append("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n\(value)".data(using: String.Encoding.utf8)!)
}
uploadData.append("\r\n--\(boundaryConstant)--\r\n".data(using: String.Encoding.utf8)!)
print("upload",parameters)
return (mutableURLRequest , uploadData)
}
>>> import re
>>> s="four digits 1234 five digits 56789 six digits 012345"
>>> re.findall(r"\D(\d{5})\D", s)
['56789']
, если они могут произойти в самом начале или в самом конце, проще вставить строку, чем беспорядок со специальными случаями
>>> re.findall(r"\D(\d{5})\D", " "+s+" ")
Вероятно, вы хотите совместить не цифру до и после строки из 5 цифр, например [^0-9]([0-9]{5})[^0-9]
. Затем вы можете захватить внутреннюю группу (нужная строка).
Без заполнения строки для начала и конца конкретного случая, как в ответе John La Rooy , можно использовать негативы lookahead и lookbehind для обработки обоих случаев с одним регулярным выражением
>>> import re
>>> s = "88888 999999 3333 aaa 12345 hfsjkq 98765"
>>> re.findall(r"(?<!\d)\d{5}(?!\d)", s)
['88888', '12345', '98765']
Примечание. Существует проблема с использованием \D
, поскольку \D
соответствует любому символу, который не является цифрой, вместо этого используйте \b
. \b
важен здесь, потому что он соответствует границе слова, но только в конце или в начале слова.
import re
input = "four digits 1234 five digits 56789 six digits 01234,56789,01234"
re.findall(r"\b\d{5}\b", input)
result : ['56789', '01234', '56789', '01234']
, но если вы используете re.findall (r "\ D (\ d {5}) \ D", s) вывод: ['56789', '01234'] \ D не может для обработки запятой или любых введенных цифр.
\ b является важной частью здесь, она соответствует пустой строке, но только в конце или в начале слова.
Дополнительная документация: https://docs.python.org/2/library/re.html
Подробнее Разъяснение использования \D
vs \b
:
В этом примере используется \D
, но он не фиксирует все пять цифр.
В этом примере использует \b
при захвате всех пятизначных цифр.
Приветствия
\b
в остальном является допустимым символом escape в строках. Проблема с этим ответом заключается в том, что он не работает, если другие альфа-символы соединены с строкой цифр, например. & Quot; 56789a & Quot;
– John La Rooy
29 September 2014 в 21:05
\D
не обрабатывает начало или конец строк? Я имел в виду это в своем ответе.
– John La Rooy
29 September 2014 в 21:15
Вы можете попробовать
\D\d{5}\D
или, может быть,
\b\d{5}\b
Я не уверен, что python обрабатывает контуры строк и пробелы там.
Я считаю, что ^\d{5}$
не сработает для вас, так как вы, вероятно, захотите получить числа, которые находятся где-то внутри другого текста.
re.findall(r"\D(\d{5})\D","15/05/2018 a8711 43160")
дает[ ]
. Что дает? – Aetos 8 June 2018 в 10:09