标签: python-re

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

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
查看次数

Python 中的命名反向引用 (?P=name) 问题

我正在学习rePython 的“ ”部分,命名模式(?P=name)让我感到困惑,

当我用来re.sub()进行数字和字符的交换时,模式“ (?P=name)”不起作用,但模式“ \N”和“ \g<name>”仍然有意义。代码如下:

[IN]print(re.sub(r'(?P<digit>\d{3})-(?P<char>\w{4})', r'(?P=char)-(?P=digit)', '123-abcd'))
[OUT] (?P=char)-(?P=digit)
[IN] print(re.sub(r'(?P<digit>\d{3})-(?P<char>\w{4})', r'\2-\1', '123-abcd'))
[OUT] abcd-123
[IN] print(re.sub(r'(?P<digit>\d{3})-(?P<char>\w{4})', r'\g<char>-\g<digit>', '123-abcd'))
[OUT] abcd-123
Run Code Online (Sandbox Code Playgroud)

为什么我使用时无法进行替代(?P=name)
以及如何正确使用呢?
我正在使用Python 3.5

python regex backreference python-3.x python-re

4
推荐指数
1
解决办法
2099
查看次数

正则表达式从电子邮件地址中删除加地址 +

我想删除从+到 的所有内容@,包括+,但不删除@

我所能得到的最接近的是在正则表达式之间使用它。

>>> email = "garry+filter@gmail.com"
>>> re.sub(r'\+[^)]*\@', '', email)

garrygmail.com
Run Code Online (Sandbox Code Playgroud)

python regex string python-re

4
推荐指数
1
解决办法
1277
查看次数

re.split(" ", string) 和 re.split("\s+", string) 的区别?

我目前正在研究正则表达式并遇到了一个查询。所以问题的标题是我想要找出的。我认为因为\s代表一个空白,re.split(" ", string)并且re.split("\s+", string)会给出相同的值,如下所示:

>>> import re
>>> a = re.split(" ", "Why is this wrong")
>>> a
["Why", "is", "this", "wrong"]
Run Code Online (Sandbox Code Playgroud)
>>> import re
>>> a = re.split("\s+", "Why is this wrong")
>>> a
["Why", "is", "this", "wrong"]
Run Code Online (Sandbox Code Playgroud)

这两个给出了相同的答案,所以我认为它们是同一回事。然而,事实证明这些是不同的。在什么情况下会有所不同?我在这里错过了什么让我失明?

python split python-re

4
推荐指数
1
解决办法
487
查看次数

如何使用正则表达式提取降价链接?

我目前有用于解析 Markdown 文本的 Python 代码,以便提取 Markdown 链接的方括号内的内容以及超链接。

import re

# Extract []() style links
link_name = "[^]]+"
link_url = "http[s]?://[^)]+"
markup_regex = f'\[({link_name})]\(\s*({link_url})\s*\)'

for match in re.findall(markup_regex, '[a link](https://www.wiki.com/atopic_(subtopic))'):
    name = match[0]
    url = match[1]
    print(url)
    # url will be https://wiki.com/atopic_(subtopic
Run Code Online (Sandbox Code Playgroud)

这将无法获取正确的链接,因为它匹配第一个括号,而不是最后一个。

我怎样才能使正则表达式尊重直到最后一个括号?

python regex python-re

4
推荐指数
1
解决办法
2988
查看次数

提取特定单词后的所有数字(整数和浮点数)

假设我有以下字符串:

\n
str = """\n         HELLO 1 Stop #$**& 5.02\xe2\x80\xbc\xef\xb8\x8f 16.1 \n         regex\n\n         5 ,#2.3222\n      """\n
Run Code Online (Sandbox Code Playgroud)\n

我想导出“stop”一词后面的所有数字,无论是int还是float,不区分大小写。所以预期结果将是:

\n
[5.02, 16.1, 5, 2.3222]\n
Run Code Online (Sandbox Code Playgroud)\n

到目前为止,我走得最远的是使用其他帖子中的 PyPi 正则表达式:

\n
regex.compile(r'(?<=stop.*)\\d+(?:\\.\\d+)?', regex.I)\n
Run Code Online (Sandbox Code Playgroud)\n

但这个表达式只给我 [5.02, 16.1]

\n

python regex string python-re

4
推荐指数
1
解决办法
959
查看次数

multi_vowel_words 函数返回具有 3 个或更多连续元音的所有单词

import re
    def multi_vowel_words(text):
        pattern =r"\b\w[aeiou]{3,},?\s?.*\w[aeiou]{3,}.*\b"
        result = re.findall(pattern, text)
        return result
Run Code Online (Sandbox Code Playgroud)

我哪里做错了

运行我的代码后我得到这个:

[]
['queen is courageous and gracious']
['quietly and await their delicious dinner']
[]
[]

#below this are desired outputs
print(multi_vowel_words("Life is beautiful")) 
# ['beautiful']

print(multi_vowel_words("Obviously, the queen is courageous and 
gracious.")) 

# ['Obviously', 'queen', 'courageous', 'gracious']

print(multi_vowel_words("The rambunctious children had to sit quietly and 
await their delicious 
dinner.")) 
# ['rambunctious', 'quietly', 'delicious']

print(multi_vowel_words("The order of a data queue is First In First Out 
(FIFO)")) 
   # ['queue'] …
Run Code Online (Sandbox Code Playgroud)

python python-re

3
推荐指数
1
解决办法
6350
查看次数

python正则表达式问题从天数小时分钟中提取数字

我正在学习 python regex 并想知道如何从中提取数字 x days y hours z minutes

注意:没有月或秒,只允许天、分和秒中的一个或多个。

我的尝试

import re

s1 = '5 days 19 hours 30 minutes'
s2 = '5 days'
s3 = '19 hours'
s4 = '5 days 19 hours'

pat = r'((\d+)(?<=\sdays))?((\d+)(?<=\shours))?((\d+)(?<=\sminutes))?'


d,h,m = re.findall(pat,s)

Note: 2 days 3 hours ==> d=2 h=3
      2 hours 3 minutes ==> h=2 m=3
Run Code Online (Sandbox Code Playgroud)

我正在努力修复lookbehinds。如何解决问题?

python python-re

3
推荐指数
1
解决办法
165
查看次数

为什么我收到错误 -“re.error:在位置 2 处多次重复”

我第一次学习 re 模块但遇到了错误。

代码-

import re
my_str='''pyhton
c++
java
c++
js node
ds algo
pyhton
js node
javac++
java
js node
ds algo'''
var = re.findall("c++",my_str)
Run Code Online (Sandbox Code Playgroud)

它给出了错误 -re.error: multiple repeat at position 2

python python-re

3
推荐指数
1
解决办法
7420
查看次数

标签 统计

python ×10

python-re ×10

regex ×5

python-3.x ×2

string ×2

backreference ×1

split ×1