Ответ на верхний голос не учитывает случаи, когда максимальная прибыль отрицательна и должна быть изменена, чтобы допускать такие случаи. Это можно сделать, ограничив диапазон цикла до (len (a) - 1) и изменив способ получения прибыли путем изменения индекса на единицу.
def singSellProfit(a):
profit = -max(a)
low = a[0]
for i in range(len(a) - 1):
low = min(low, a[i])
profit = max(profit, a[i + 1] - low)
return profit
Сравните эту версию функции с предыдущим для массива:
s = [19,11,10,8,5,2]
singSellProfit(s)
-1
DynamicProgrammingSingleSellProfit(s)
0
А единственный regex для парсинга и разрыв полный URL включая параметры запроса и привязки, например,
https://www.google.com/dir/1/2/search.html? arg=0-a& arg1=1-b& положения arg3-c#hash
^((http[s]?|ftp):\/)?\/?([^:\/\s]+)((\/\w+)*\/)([\w\-\.]+[^#?\s]+)(.*)?(#[\w\-]+)?$
RexEx:
URL: RegExp [' $ &';],
protocol:RegExp. 2$,
host:RegExp. 3$,
path:RegExp. 4$,
file:RegExp.$6,
query:RegExp. 7$,
hash:RegExp. 8$
Вы могли затем далее проанализировать хост (''. разграниченный) довольно легко.
то, Что я сделал бы, использовать что-то вроде этого:
/*
^(.*:)//([A-Za-z0-9\-\.]+)(:[0-9]+)?(.*)$
*/
proto $1
host $2
port $3
the-rest $4
дальнейший синтаксический анализ 'остальные', чтобы быть максимально конкретным. Выполнение его в одном regex является, ну, в общем, немного сумасшедшим.
Java предлагает класс URL, который сделает это. Объекты URL Запроса.
На ноте стороны, предложениях PHP parse_url () .
Попробуйте следующее:
^((ht|f)tp(s?)\:\/\/|~/|/)?([\w]+:\w+@)?([a-zA-Z]{1}([\w\-]+\.)+([\w]{2,5}))(:[\d]{1,5})?((/?\w+/)+|/?)(\w+\.[\w]{3,4})?((\?\w+=\w+)?(&\w+=\w+)*)?
Это поддерживает HTTP / FTP, субдомены, папки, файлы и т.д.
, я нашел его от быстрого поиска Google:
http://geekswithblogs.net/casualjim/archive/2005/12/01/61722.aspx
Я знаю, что Вы требуете агностика языка на этом, но можно сказать нам, что Вы используете именно так, мы знаем, какие regex возможности Вы имеете?
, Если у Вас есть возможности неполучения соответствий, можно изменить выражение hometoast так, чтобы подвыражения, что Вы не интересуетесь получением, были настроены как это:
(?:SOMESTUFF)
необходимо было бы все еще скопировать и вставить (и немного изменить), Regex в несколько мест, но это имеет смысл - Вы только проверяете, чтобы видеть, существует ли подвыражение, а скорее если он существует как часть URL. Используя модификатор неполучения для подвыражений может дать Вам, в чем Вы нуждаетесь и ничто больше, которое, если я читаю Вас правильно, является тем, что Вы хотите.
Так же, как маленькое, маленькое примечание, выражение hometoast не должно помещать скобки вокруг' для 'https', так как у него только есть один символ там. Кванторы определяют количество одного символа (или класс символов или подвыражение) непосредственно предыдущий их. Так:
https?
соответствовал бы 'http' или 'https' очень хорошо.
Используя http://www.fileformat.info/tool/regex.htm regex hometoast работает отлично.
, Но вот соглашение, я хочу использовать различные regex шаблоны в различных ситуациях в моей программе.
, Например, у меня есть этот URL, и у меня есть перечисление, которое перечисляет все поддерживаемые URL в моей программе. Каждый объект в перечислении имеет метод getRegexPattern, который возвращает regex шаблон, который будет затем использоваться для сравнения URL. Если конкретный regex шаблон возвращает true, то я знаю, что этот URL поддерживается моей программой. Так, каждое перечисление имеет свой собственный regex в зависимости от того, где это должно посмотреть в URL.
предложение Hometoast является большим, но в моем случае, я думаю, что это не помогло бы (если я не копирую, вставляют тот же regex во всех перечислениях).
Именно поэтому я хотел, чтобы ответ дал regex для каждой ситуации отдельно. Хотя +1 для hometoast. ;)
/^((?P<scheme>https?|ftp):\/)?\/?((?P<username>.*?)(:(?P<password>.*?)|)@)?(?P<hostname>[^:\/\s]+)(?P<port>:([^\/]*))?(?P<path>(\/\w+)*\/)(?P<filename>[-\w.]+[^#?\s]*)?(?P<query>\?([^#]*))?(?P<fragment>#(.*))?$/
Из моего ответа на подобный вопрос . Работы лучше, чем некоторые из других упомянули, потому что у них были некоторые ошибки (такие как не поддержка имени пользователя/пароля, не поддерживая односимвольные имена файлов, повреждаемые идентификаторы фрагмента).
субдомен и домен являются трудными, потому что субдомен может иметь несколько частей, как может высокоуровневый домен, http://sub1.sub2.domain.co.uk/
the path without the file : http://[^/]+/((?:[^/]+/)*(?:[^/]+$)?)
the file : http://[^/]+/(?:[^/]+/)*((?:[^/.]+\.)+[^/.]+)$
the path with the file : http://[^/]+/(.*)
the URL without the path : (http://[^/]+/)
(Скидка с цены не является очень дружественной по отношению к regexes)
Я нашел, что самый высокий проголосовавший ответ (ответ hometoast) не работает отлично на меня. Две проблемы:
следующее является измененной версией:
^((http[s]?|ftp):\/)?\/?([^:\/\s]+)(:([^\/]*))?((\/\w+)*\/)([\w\-\.]+[^#?\s]+)(\?([^#]*))?(#(.*))?$
Положение частей следующие:
int SCHEMA = 2, DOMAIN = 3, PORT = 5, PATH = 6, FILE = 8, QUERYSTRING = 9, HASH = 12
Редактирование, отправленное скоро пользователем:
function getFileName(path) {
return path.match(/^((http[s]?|ftp):\/)?\/?([^:\/\s]+)(:([^\/]*))?((\/[\w\/-]+)*\/)([\w\-\.]+[^#?\s]+)(\?([^#]*))?(#(.*))?$/i)[8];
}
regexp для получения пути URL без файла.
url = ' http: // domain / dir1 / dir2 / somefile ' url.scan (/ ^ (http: // [^ /] +) ((?: / [^ /] +) + (? = /))? /? (?: [^ /] +)? $ / i) .to_s
Это может быть полезно для добавления относительного пути к этому URL.
You can get all the http/https, host, port, path as well as query by using Uri object in .NET. just the difficult task is to break the host into sub domain, domain name and TLD.
There is no standard to do so and can't be simply use string parsing or RegEx to produce the correct result. At first, I am using RegEx function but not all URL can be parse the subdomain correctly. The practice way is to use a list of TLDs. After a TLD for a URL is defined the left part is domain and the remaining is sub domain.
However the list need to maintain it since new TLDs is possible. The current moment I know is publicsuffix.org maintain the latest list and you can use domainname-parser tools from google code to parse the public suffix list and get the sub domain, domain and TLD easily by using DomainName object: domainName.SubDomain, domainName.Domain and domainName.TLD.
This answers also helpfull: Get the subdomain from a URL
CaLLMeLaNN
Я бы рекомендовал не использовать регулярное выражение. Вызов API вроде WinHttpCrackUrl () менее подвержен ошибкам.
http://msdn.microsoft.com/en-us/library/aa384092%28VS.85%29.aspx