问题标签 [python-regex]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
113528 浏览

python - re.sub replace with matched content

Trying to get to grips with regular expressions in Python, I'm trying to output some HTML highlighted in part of a URL. My input is

my output should be

If I do this in Javascript

I get the desired result, but if I do this in Python

I don't, how do I get Python to return the correct result rather than $1? Is re.sub even the right function to do this?

0 投票
1 回答
103 浏览

python - regex.WORD 如何影响 \b 的行为?

我正在使用PyPI 模块regex进行正则表达式匹配。它说

  • 默认 Unicode 字边界

    WORD标志将“字边界”的定义更改为默认 Unicode 字边界的定义。这适用于\b\B

但似乎什么都没有改变:

我没发现有什么不同……?

0 投票
1 回答
650 浏览

python - Python regex 模块中的简单大小写折叠与完整大小写折叠

这是我要询问的模块:https ://pypi.org/project/regex/ ,它是 Matthew Barnett 的regex

在项目描述页面中,V0 和 V1 之间的行为差​​异表示为(注意粗体部分):

旧行为与新行为

为了与re模块兼容,该模块有两种行为:

  • 版本 0 行为(旧行为,与 re 模块兼容):

    请注意,re 模块的行为可能会随着时间而改变,我将努力在版本 0 中匹配该行为。

    • VERSION0由orV0标志或(?V0)在模式中指示。
    • Unicode 中不区分大小写的匹配默认使用简单的大小写折叠
  • 版本 1 行为(新行为,可能与 re 模块不同):

    • VERSION1由orV1标志或(?V1)在模式中指示。
    • 默认情况下,Unicode 中不区分大小写的匹配使用完全大小写折叠

如果未指定版本,则正则表达式模块将默认为regex.DEFAULT_VERSION.

我自己尝试了一些示例,但没有弄清楚它的作用:

简单案例折叠和全案例折叠有什么区别?或者您能否提供一个示例,其中(不区分大小写)正则表达式匹配 V1 中的某些内容,但不匹配 V0 中的内容?

0 投票
1 回答
81 浏览

python - Python regexes: matching parentheses in newest version (Feb 2019)

1. About Python regex 2019.02.21

Python is upgrading the regex module. The latest release is from Feb 21, 2019. You can consult it here: https://pypi.org/project/regex/

It will replace the re module in time. For now, you need to install it manually with pip install regex and import the regex module instead of re.

 

2. New regex feature

The coolest feature about the newest version is Recursive patterns. Read more about it here: https://bitbucket.org/mrabarnett/mrab-regex/issues/27

This feature enables to find matching paretheses ( .. ) or curly brackets { .. }. The following webpage explains how to do that: https://www.regular-expressions.info/recurse.html#balanced I quote:

The main purpose of recursion is to match balanced constructs or nested constructs. The generic regex is b(?:m|(?R))*e where b is what begins the construct, m is what can occur in the middle of the construct, and e is what can occur at the end of the construct. For correct results, no two of b, m, and e should be able to match the same text. You can use an atomic group instead of the non-capturing group for improved performance: b(?>m|(?R))*e.  
 
A common real-world use is to match a balanced set of parentheses. \((?>[^()]|(?R))*\) matches a single pair of parentheses with any text in between, including an unlimited number of parentheses, as long as they are all properly paired.

 

3. My question

I'm experimenting with matching curly brackets { .. }. So I simply apply the regex from the webpage above, but I replace ( by {. That gives me the following regex:

{(?>[^{}]|(?R))*}

I try it on https://regex101.com and get beautiful results(*):

enter image description here

I want to take it one step further, and find a specific set of matching curly braces, like so:

MEMORY\s*{(?>[^{}]|(?R))*}

The result is great:

enter image description here

But when I try

SECTIONS\s*{(?>[^{}]|(?R))*}

Nothing gets found. No match. The only difference between the MEMORY{..} and SECTIONS{..} part is that the latter has some nested curly braces. So the problem should be found in there. But I don't know how to fix this.


* Note 1:
On https://regex101.com, you can select the flavor of the regex. Usually I select Python, but this time I selected PCRE(PHP) because the regex101 website didn't apply the latest Python regexes upgrade yet.  
To confirm the results, I also try it in a simple python-session in my terminal, with commands like:
import regex
p = regex.compile(r"...")
text = """ ... """
p.findall(text)

* Note 2:
The text I use for testing is:


0 投票
1 回答
89 浏览

python - 如何使用递归正则表达式或其他方法在 Python 中递归验证这个类似 BBcode 的标记?

我正在尝试编写一个程序来验证用类似于 BBcode 的标记语言编写的文档。

这种标记语言既有匹配的 ( [b]bold[/b] text) 标记,也有不匹配的 ( today is [date]) 标记。不幸的是,不能选择使用不同的标记语言。

但是,我的正则表达式并没有按照我想要的方式行事。它似乎总是停在第一个匹配的结束标记处,而不是用递归标识该嵌套标记(?R)

我正在使用该regex模块,它支持(?R),而不是re

我的问题是:

  • 如何有效地使用递归正则表达式来匹配嵌套标签而不终止第一个标签?

  • 如果有比正则表达式更好的方法,那是什么方法?

这是我构建后的正则表达式: \[(b|i|u|h1|h2|h3|large|small|list|table|grid)\](?:((?!\[\/\1\]).)*?|(?R))*\[\/\1\]

这是一个无法按预期工作的测试字符串:( [large]test1 [large]test2[/large] test3[/large]它应该匹配整个字符串,但在 test3 之前停止)

这是 regex101.com 上的正则表达式:https ://regex101.com/r/laJSLZ/1

此测试不需要在几毫秒甚至几秒内完成,但它确实需要能够在 Travis-CI 构建合理的时间内验证大约 100 个文件,每个文件包含 1,000 到 10,000 个字符。

对于上下文,使用此正则表达式的逻辑如下所示:

0 投票
1 回答
106 浏览

python - 如何从字符串python中删除所有表情符号(unicode)字符

我有以下字符串:

我需要清理它,但我坚持去掉字符串末尾的符号,也\\n#\\xe3\\x82\\xa2\\xe3 就是最有可能的 unicode 符号、表情符号和换行符\\n 这是我所做的:

我得到以下输出:

所以我仍然有所有这些nxe3有人可以为此目的建议一个 python 正则表达式吗?提前谢谢。

0 投票
3 回答
108 浏览

python - 用于查找子字符串的正则表达式

我正在尝试使用正则表达式查找子字符串的所有出现。子串由三部分组成,以一个或多个'A'开始,后接一个或多个'N',以一个或多个'A'结束。让一个字符串'AAANAANABNA',如果我解析字符串,我应该得到两个子字符串'AANAA''AANA'作为输出。所以,我尝试了下面的代码。

而且,我得到以下输出,

但是,我希望输出为,

也就是说,第一场比赛的尾随A应该是下一场比赛的领先A。我怎么能得到那个,知道吗?

0 投票
2 回答
50 浏览

python - 在Python中以模糊方式匹配一个数字

我有以下问题:我的字符串包含可能包含点或逗号的数字。例如:

然后我有没有任何符号的数字,例如'10200'

我想在字符串中找到子字符串的位置'10.200'

我想一种方法是创建一种在数字中插入点的方法。

但另一种方法是执行某种形式的模糊匹配。

为此,我尝试了正则表达式模块,但没有成功。IE:

回报:

10.200因此,它与我希望的不匹配。

你有什么建议?

0 投票
1 回答
281 浏览

python - 具有重复组名的正则表达式

我正在尝试制作一个正则表达式,其中我有一些重复的组名,例如,在下面的示例中,我想找到 的值phA这样B如果我在 中替换它们pattern,我就会检索string。我使用 来执行此操作regex,因为 Python 的默认re库不允许重复名称。

我检索了预期的输出:

我担心的是,这个库似乎有一些问题,或者我没有正确使用它。例如,如果我替换string为: string = 'BLABLA __ ( A ` y ) __ ( A ` N ) __ ( y = N -> ( A ` y ) = ( A ` N ) ) )'

ph那么上面的代码为,A和提供了完全相同的值B,忽略 , 开头的前缀BLABLA应该是因为没有解决方案。stringmatchNone

有任何想法吗?

注意:更准确地说,在我的问题中,我有成对的模式/字符串(p_0, s_0) ... (p_n, s_n),我必须在这些对之间找到一个有效的匹配,所以我用分隔符将它们连接在一起__,但我也很好奇是否有合适的方法来做到这一点。

0 投票
1 回答
32 浏览

python - 如何在 Python PyPi 正则表达式模式中引用命名捕获组

如标题所示,我们可以轻松地将正则表达式中的嵌套括号与 eg 匹配

这将匹配平衡的括号。
我们如何使用命名子组,例如

我不是在寻找解析器解决方案或任何东西,而是在Python( regexmodule) 或PCRE.