标签: python-re

组合 re 标志 re.IGNORECASE、re.MULTILINE 和 re.DOTALL

谁能告诉我是否可以组合re.IGNORECASEre.MULTILINE和 等标志re.DOTALL来进行正则表达式匹配?

r = re.compile(regex, re.IGNORECASE | re.MULTILINE | re.DOTALL)
Run Code Online (Sandbox Code Playgroud)

我需要根据用例匹配整个段落或一行中的表达式。

python python-3.x python-re

10
推荐指数
1
解决办法
2477
查看次数

如何向 Python 3 RegEx 添加超时?

尽管我尽了最大努力进行优化,但我有一个可能需要很长时间才能执行的正则表达式。我希望能够在它停止的情况下中断它,并继续执行程序的其余部分

其他语言(如 C#)具有用于正则表达式执行的超时属性,我想知道为什么 Python 3 似乎没有相同的方法。

Python 3 内部有一个最大执行时间,因为很长一段时间后,正则表达式中止并继续执行。这是真的吗?

我想在 python 3 上分析这个问题并使用独立于平台的方法(我看到装饰器仅在带有信号的 NIX 操作系统上工作......)

也许答案是使用关于如何在 Python 中停止函数的更通用方法来管理这个问题,例如如何在 Python 中向函数添加超时使用超时停止 Python 中的函数

我怎样才能实现这样的超时?

python regex timeout python-3.x python-re

8
推荐指数
1
解决办法
2497
查看次数

尝试在正则表达式中转义括号时收到 PEP8“无效转义序列”警告

我正在尝试转义这样的字符串:

string = re.split(")(", other_string)
Run Code Online (Sandbox Code Playgroud)

因为不转义这些括号会给我一个错误。但如果我这样做:

string = re.split("\)\(", other_string)
Run Code Online (Sandbox Code Playgroud)

我收到来自 PEP8 的警告,说这是一个无效的转义序列。有没有办法正确地做到这一点?

将 'r' 放在字符串前面并不能修复它。

python regex pep8 python-re

7
推荐指数
1
解决办法
9415
查看次数

无法使用请求从网页中获取所有链接

我正在尝试获取连接到此网页中每个图像的所有链接。

如果让 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)

python beautifulsoup web-scraping python-3.x python-re

7
推荐指数
1
解决办法
323
查看次数

只保留包含字符串列表中的字符串的 df 列值

我有一个像这样的字符串列表:

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)

我刚开始使用正则表达式,因此在解决它时遇到了一些麻烦,希望得到一些帮助。

python dataframe python-3.x pandas python-re

6
推荐指数
1
解决办法
72
查看次数

如何使用python从pdf中提取粗体文本?

下面的列表提供了不应单独计费的项目和服务的示例。请注意,该列表并未包含全部内容。

\n

1. 手术室和服务\xe2\x80\x93 包括手术室、主要和次要手术室、治疗室、\n内窥镜实验室、心导管实验室、X 射线。

\n

2. 设施基本费用- 肺科和心脏病科手术室。医院\xe2\x80\x99s\n手术室和服务的费用应包括上面列出的全部护理人员服务、用品和设备

\n

我想要的输出如下:

\n
    \n
  1. 手术室和服务
  2. \n
  3. 设施基本费用
  4. \n
\n

第一个句子也是粗体,但我们需要省略该句子,我们只需要提取那些用数字表示的文本

\n

python nlp python-re

6
推荐指数
2
解决办法
6931
查看次数

如何检查命名捕获组是否存在?

我想知道测试命名捕获组是否存在的正确方法是什么。具体来说,我有一个函数将编译的正则表达式作为参数。正则表达式可能有也可能没有特定的命名组,并且命名组可能会也可能不会出现在传入的字符串中:

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 regex python-re

6
推荐指数
2
解决办法
3302
查看次数

是否在同一行中重新匹配和分组捕获?

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)

这似乎必须进行两次比赛。

python python-re

5
推荐指数
1
解决办法
65
查看次数

Python正则表达式编译和搜索带有数字和单词的字符串

我有三个字符串,其中包含街道名称和公寓号的信息。

"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)

python regex python-3.x python-re

5
推荐指数
1
解决办法
160
查看次数

将 split 与 findall 结合起来

我正在用一些分隔符分割字符串,但希望分隔符也匹配

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)

python split python-re

5
推荐指数
1
解决办法
197
查看次数