我正在尝试使用正则表达式在/字符的第3次和第4次出现之间获取第3个字符串
字符串列表如下:
...
/restaurants/garnish/گارنیش/
/restaurants/burger1358/برگر-۱۳۵۸/
/restaurants/delion-saadat/صبحانه--و-میان-وعده-دلیون-شعبه-سعادت-آباد/
/restaurants/kamran/کامران--اسکای-فال-سابق-/
...
上面列表的期望输出是这样的:
...
گارنیش
برگر-۱۳۵۸
صبحانه--و-میان-وعده-دلیون-شعبه-سعادت-آباد
کامران--اسکای-فال-سابق-
...
由于字符串的所需部分不是ASCII(英语)并且没有模式(名称不同),所以我无法弄清楚正确的正则表达式语法。
答案 0 :(得分:1)
可能的正则表达式为:
/.+?/.+?/(.+?)/
但是,正如评论中所指出的那样,您不应该将正则表达式用于简单,过大且性能不佳(也不太可读)的东西。您应该使用str.split:
your_string.split('/')[3]
答案 1 :(得分:0)
如果您知道结构没有改变,请使用str.split
。如果url的结构发生变化,而您只想获取波斯字符,则可以使用Unicode字符范围来表示波斯语,以得到所需的结果。
import re
line = "/restaurants/garnish/گارنیش/"
re.findall("([\u0600-\u06FF\s]+)", line)
['گارنیش']
编辑:如果要查找列表中的每个网址,则需要以下内容:
lines = ['/restaurants/garnish/گارنیش/',
'/restaurants/burger1358/برگر-۱۳۵۸/',
'/restaurants/delion-saadat/صبحانه--و-میان-وعده-دلیون-شعبه-سعادت-آباد/',
'/restaurants/kamran/کامران--اسکای-فال-سابق-/']
[''.join(re.findall("([\u0600-\u06FF\s]+)", n)) for n in lines]
['گارنیش','برگر۱۳۵۸','صبحانهومیانوعدهدلیونشعبهسعادتآباد','کامراناسکایفالسابق']
答案 2 :(得分:0)
您可能不需要正则表达式
res = [w.split('/', 4)[3] for w in s.splitlines() if '/' in w]