问题标签 [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.
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?
python - regex.WORD 如何影响 \b 的行为?
我正在使用PyPI 模块regex
进行正则表达式匹配。它说
默认 Unicode 字边界
该
WORD
标志将“字边界”的定义更改为默认 Unicode 字边界的定义。这适用于\b
和\B
。
但似乎什么都没有改变:
我没发现有什么不同……?
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 中的内容?
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
whereb
is what begins the construct,m
is what can occur in the middle of the construct, ande
is what can occur at the end of the construct. For correct results, no two ofb
,m
, ande
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(*):
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:
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:
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 个字符。
对于上下文,使用此正则表达式的逻辑如下所示:
python - 如何从字符串python中删除所有表情符号(unicode)字符
我有以下字符串:
我需要清理它,但我坚持去掉字符串末尾的符号,也\\n#\\xe3\\x82\\xa2\\xe3
就是最有可能的 unicode 符号、表情符号和换行符\\n
这是我所做的:
我得到以下输出:
所以我仍然有所有这些n和xe3有人可以为此目的建议一个 python 正则表达式吗?提前谢谢。
python - 用于查找子字符串的正则表达式
我正在尝试使用正则表达式查找子字符串的所有出现。子串由三部分组成,以一个或多个'A'开始,后接一个或多个'N',以一个或多个'A'结束。让一个字符串'AAANAANABNA',如果我解析字符串,我应该得到两个子字符串'AANAA'和'AANA'作为输出。所以,我尝试了下面的代码。
而且,我得到以下输出,
但是,我希望输出为,
也就是说,第一场比赛的尾随A应该是下一场比赛的领先A。我怎么能得到那个,知道吗?
python - 在Python中以模糊方式匹配一个数字
我有以下问题:我的字符串包含可能包含点或逗号的数字。例如:
然后我有没有任何符号的数字,例如'10200'
。
我想在字符串中找到子字符串的位置'10.200'
。
我想一种方法是创建一种在数字中插入点的方法。
但另一种方法是执行某种形式的模糊匹配。
为此,我尝试了正则表达式模块,但没有成功。IE:
回报:
10.200
因此,它与我希望的不匹配。
你有什么建议?
python - 具有重复组名的正则表达式
我正在尝试制作一个正则表达式,其中我有一些重复的组名,例如,在下面的示例中,我想找到 的值ph
,A
这样B
如果我在 中替换它们pattern
,我就会检索string
。我使用 来执行此操作regex
,因为 Python 的默认re
库不允许重复名称。
我检索了预期的输出:
我担心的是,这个库似乎有一些问题,或者我没有正确使用它。例如,如果我替换string
为:
string = 'BLABLA __ ( A ` y ) __ ( A ` N ) __ ( y = N -> ( A ` y ) = ( A ` N ) ) )'
ph
那么上面的代码为,A
和提供了完全相同的值B
,忽略 , 开头的前缀BLABLA
应该是因为没有解决方案。string
match
None
有任何想法吗?
注意:更准确地说,在我的问题中,我有成对的模式/字符串(p_0, s_0) ... (p_n, s_n)
,我必须在这些对之间找到一个有效的匹配,所以我用分隔符将它们连接在一起__
,但我也很好奇是否有合适的方法来做到这一点。
python - 如何在 Python PyPi 正则表达式模式中引用命名捕获组
如标题所示,我们可以轻松地将正则表达式中的嵌套括号与 eg 匹配
这将匹配平衡的括号。
我们如何使用命名子组,例如
我不是在寻找解析器解决方案或任何东西,而是在Python
( regex
module) 或PCRE
.