我的字符串就像[[English language|English]]
一样。我试图从字符串中提取文本。但没有运气。我只是想忽略文字[[English language|
。输出应为English
。
另一个例子:
[[Stack Exchange|Question]]
输出应仅为Question
如果没有|
[[Stack Exchange]]
然后输出应该只有Stack Exchange
。
我是regex
的新手。你能帮帮我吗?非常感谢你
答案 0 :(得分:1)
答案 1 :(得分:1)
这可以在没有正则表达式的情况下完成
>>> text="[[English language|English]]"
>>> text.strip("[]").split("|")[-1]
'English'
>>> text="[[Stack Exchange|Question]]"
>>> text.strip("[]").split("|")[-1]
'Question'
>>> text="[[Stack Exchange]]"
>>> text.strip("[]").split("|")[-1]
'Stack Exchange'
注意,首先从两端剥去所有“[”和“]”,然后用“|”拆分字符串作为分隔符。返回列表中的最后一项。
使用Regex
>>> text="[[English language|English]]"
>>> re.findall("([^\[\]\|]+)",text)[-1]
'English'
>>> text="[[Stack Exchange|Question]]"
>>> re.findall("([^\[\]\|]+)",text)[-1]
'Question'
>>> text="[[Stack Exchange]]"
>>> re.findall("([^\[\]\|]+)",text)[-1]
'Stack Exchange'
>>>
如果未找到匹配项,则会生成索引错误:所以我们可以进行以下修改
try:
result=text.strip("[]").split("|")[-1]
except IndexError:
None #or what ever you intend to have here
或
try:
result=re.findall("([^\[\]\|]+)",text)[-1]
except IndexError:
None #or what ever you intend to have here
效果比较
>>> stmt1="""
import re
text="[[English language|English]]"
try:
result=re.findall("([^\[\]\|]+)",text)[-1]
except IndexError:
None
"""
>>> stmt2="""
text="[[English language|English]]"
try:
result=text.strip("[]").split("|")[-1]
except IndexError:
None
"""
>>> import timeit
>>> t1=timeit.Timer(stmt=stmt1)
>>> t2=timeit.Timer(stmt=stmt2)
>>> print "%.2f usec/pass" % (1000000 * t1.timeit(number=100000)/100000)
4.89 usec/pass
>>> print "%.2f usec/pass" % (1000000 * t2.timeit(number=100000)/100000)
1.43 usec/pass
>>>