ryg*_*y72 5 python regex python-3.x
我有一大块文本,我正在检查特定的模式,看起来基本上是这样的:
unique_options_search = new Set([
"updates_EO_LTB",
"us_history",
"uslegacy",
etc., etc., etc.
]);
$input.typeahead({
source: [...unique_options_search],
autoSelect: false,
afterSelect: function(value)
Run Code Online (Sandbox Code Playgroud)
我的文本变量已命名'html_page',我的起点和终点如下所示:
start = "new Set(["
end = "]);"
Run Code Online (Sandbox Code Playgroud)
我以为我可以用这个单线找到我想要的东西:
r = re.findall("start(.+?)end",html_page,re.MULTILINE)
Run Code Online (Sandbox Code Playgroud)
但是,它根本没有返回任何东西.这有什么不对?我在网上看到了其他很好的例子.
这里有很多问题.
"start(.+?)end"在Python中是一个字符串,它描述了字面上匹配的正则表达式start,然后是一些东西,然后字面匹配end.变量start,end在这里根本不重要.你可能打算在start + "(.+?)" + end这里写一下..在Python中与换行符不匹配.re.MULTILINE这里没关系,它只改变了行为^和$(参见文档).您应该使用re.DOTALL(参见文档).start,并end包括与正则表达式(如特殊含义的字符(和[).你必须确保他们没有得到特别的对待.您可以使用正确的数字手动转义它们,\或者只是委托该工作re.escape来获得与您需要的字面匹配的正则表达式.将所有这些结合在一起:
import re
html_page = """
unique_options_search = new Set([
"oecd_updates_EO_LTB",
"us_history",
"us_legacy",
etc., etc., etc.
]);
$input.typeahead({
source: [...unique_options_search],
autoSelect: false,
afterSelect: function(value)
"""
start = "new Set(["
end = "]);"
# r = re.findall("start(.+?)end",html_page,re.MULTILINE) # Old version
r = re.findall(re.escape(start) + "(.+?)" + re.escape(end), html_page, re.DOTALL) # New version
print(r)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
119 次 |
| 最近记录: |