谁能告诉我是否可以组合re.IGNORECASE、re.MULTILINE和 等标志re.DOTALL来进行正则表达式匹配?
r = re.compile(regex, re.IGNORECASE | re.MULTILINE | re.DOTALL)
Run Code Online (Sandbox Code Playgroud)
我需要根据用例匹配整个段落或一行中的表达式。
尽管我尽了最大努力进行优化,但我有一个可能需要很长时间才能执行的正则表达式。我希望能够在它停止的情况下中断它,并继续执行程序的其余部分
其他语言(如 C#)具有用于正则表达式执行的超时属性,我想知道为什么 Python 3 似乎没有相同的方法。
Python 3 内部有一个最大执行时间,因为很长一段时间后,正则表达式中止并继续执行。这是真的吗?
我想在 python 3 上分析这个问题并使用独立于平台的方法(我看到装饰器仅在带有信号的 NIX 操作系统上工作......)
也许答案是使用关于如何在 Python 中停止函数的更通用方法来管理这个问题,例如如何在 Python 中向函数添加超时或使用超时停止 Python 中的函数。
我怎样才能实现这样的超时?
我正在尝试转义这样的字符串:
string = re.split(")(", other_string)
Run Code Online (Sandbox Code Playgroud)
因为不转义这些括号会给我一个错误。但如果我这样做:
string = re.split("\)\(", other_string)
Run Code Online (Sandbox Code Playgroud)
我收到来自 PEP8 的警告,说这是一个无效的转义序列。有没有办法正确地做到这一点?
将 'r' 放在字符串前面并不能修复它。
我正在尝试获取连接到此网页中每个图像的所有链接。
如果让 selenium 脚本向下滚动直到到达底部,我可以获得所有链接。我希望抓取的一个这样的链接就是这个。
现在,我的目标是使用请求解析所有这些链接。我注意到我想要解析的链接是使用这样的B-uPwZsJtnB短代码构建的。
但是,我试图shortcode在该网页的页面源中找到的脚本标记中抓取那些不同的可用内容。600 shortcodes在那个页面周围有。我已经创建了可以解析只有第一个脚本70这样shortcode最终可以建成70个限定链接。
如何使用请求获取所有 600 个链接?
到目前为止,我已经尝试过:
import re
import json
import requests
base_link = 'https://www.instagram.com/p/{}/'
lead_url = 'https://www.instagram.com/explore/tags/baltimorepizza/'
with requests.Session() as s:
s.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36'
req = s.get(lead_url)
script_tag = re.findall(r"window\._sharedData[^{]+(.*?);",req.text)[0]
for item in json.loads(script_tag)['entry_data']['TagPage']:
tag_items = item['graphql']['hashtag']['edge_hashtag_to_media']['edges']
for elem in tag_items:
profile_link = base_link.format(elem['node']['shortcode'])
print(profile_link)
Run Code Online (Sandbox Code Playgroud) 我有一个像这样的字符串列表:
stringlist = [JAN, jan, FEB, feb, mar]
Run Code Online (Sandbox Code Playgroud)
我有一个如下所示的数据框:
**date** **value**
01MAR16 1
05FEB16 12
10jan17 5
10mar15 9
03jan05 7
04APR12 3
Run Code Online (Sandbox Code Playgroud)
我只想保留包含 stringlist 中一个字符串的日期,结果应如下所示:
**date** **value**
NA 1
05FEB16 12
10jan17 5
10mar15 9
03jan05 7
NA 3
Run Code Online (Sandbox Code Playgroud)
我刚开始使用正则表达式,因此在解决它时遇到了一些麻烦,希望得到一些帮助。
下面的列表提供了不应单独计费的项目和服务的示例。请注意,该列表并未包含全部内容。
\n1. 手术室和服务\xe2\x80\x93 包括手术室、主要和次要手术室、治疗室、\n内窥镜实验室、心导管实验室、X 射线。
\n2. 设施基本费用- 肺科和心脏病科手术室。医院\xe2\x80\x99s\n手术室和服务的费用应包括上面列出的全部护理人员服务、用品和设备
\n我想要的输出如下:
\n第一个句子也是粗体,但我们需要省略该句子,我们只需要提取那些用数字表示的文本
\n我想知道测试命名捕获组是否存在的正确方法是什么。具体来说,我有一个函数将编译的正则表达式作为参数。正则表达式可能有也可能没有特定的命名组,并且命名组可能会也可能不会出现在传入的字符串中:
some_regex = re.compile("^foo(?P<idx>[0-9]*)?$")
other_regex = re.compile("^bar$")
def some_func(regex, string):
m = regex.match(regex, string)
if m.group("idx"): # get *** IndexError: no such group here...
print(f"index found and is {m.group('idx')}")
print(f"no index found")
some_func(other_regex, "bar")
Run Code Online (Sandbox Code Playgroud)
我想测试该组是否存在而不使用try-- 因为这会短路函数的其余部分,如果找不到指定的组,我仍然需要运行该函数。
Python 中有没有办法在同一行中执行 if 重新匹配和分组捕获?
在 PERL 中,我会这样做:
my $line = "abcdef";
if ($line =~ m/ab(.*)ef/) {
print "$1\n";
}
Run Code Online (Sandbox Code Playgroud)
输出:
badger@pi0: scripts $ ./match.py
cd
Run Code Online (Sandbox Code Playgroud)
但我能在 Python 中找到的最接近的方法是这样的:
import re
line = 'abcdef'
if re.search('ab.*ef', line):
match = re.findall('ab(.*)ef', line)
print(match[0])
Run Code Online (Sandbox Code Playgroud)
输出:
badger@pi0: scripts $ ./match.pl
cd
Run Code Online (Sandbox Code Playgroud)
这似乎必须进行两次比赛。
我有三个字符串,其中包含街道名称和公寓号的信息。
"32 Syndicate street","Street 45 No 100"和"15, Tom and Jerry Street"
这里,
"32 Syndicate street" -> {"street name": "Syndicate street", "apartment number": "32"}
"Street 45 No 100" -> {"street name": "Street 45", "apartment number": "No 100"}
"15, Tom and Jerry Street" -> {"street name": "Tom and Jerry Street", "apartment number": "15"}
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用 Python 的正则表达式分别获取街道名称和公寓号。这是我当前的代码,它有问题:
import re
for i in ["32 Syndicate street","Street 45 No 100","15, Tom and Jerry Street"]:
###--- write patterns for street names
pattern_street …Run Code Online (Sandbox Code Playgroud) 我正在用一些分隔符分割字符串,但希望分隔符也匹配:
import re
s = "oren;moish30.4.200/-/v6.99.5/barbi"
print(re.split("\d+\.\d+\.\d+", s))
print(re.findall("\d+\.\d+\.\d+", s))
Run Code Online (Sandbox Code Playgroud)
我找不到一种简单的方法来合并我得到的两个列表:
['oren;moish', '/-/v', '/barbi']
['30.4.200', '6.99.5']
Run Code Online (Sandbox Code Playgroud)
进入所需的输出:
['oren;moish', '30.4.200', '/-/v', '6.99.5', '/barbi']
Run Code Online (Sandbox Code Playgroud)