在python正则表达式中,命名和未命名组都使用'('和')'定义.这导致了一种奇怪的行为.正则表达式
"(?P<a>1)=(?P<b>2)"
Run Code Online (Sandbox Code Playgroud)
与文本"1 = 2"一起使用时,将找到值为"1"的命名组"a",并将值"2"命名为组"b".但是,如果我想使用"逻辑或"运算符并连接多个规则,请使用以下正则表达式:
"((?P<a>1)=(?P<b>2))|(?P<c>3)"
Run Code Online (Sandbox Code Playgroud)
使用相同文本"1 = 2"将找到一个值为"1 = 2" 的未命名组.我知道regexp引擎会将"("和")"视为一个未命名的组,并将"a"和"b"组合在一起,并报告它已找到.但我不希望报告一个未命名的组,我只想使用"|" 为了将多个正则表达式"粘合"在一起.没有创建任何寄生的未命名组.这是在python中这样做的方法吗?
喜欢这个正则表达式吗?它匹配什么?
document.getElementById("MyElement").className =
document.getElementById("MyElement").className.replace
( /(?:^|\s)MyClass(?!\S)/ , '' )
Run Code Online (Sandbox Code Playgroud) TCL:任何人都能解释一下吗?:正则表达式
我之间感到困惑?和?:.
?表示前面的字符可能存在,也可能不存在.
然后我不明白是什么(?:)表示.
任何人都可以请解释一下.
([0-9]+(?:\.[0-9]*)?)
Run Code Online (Sandbox Code Playgroud) 我必须验证下一个字符串格式:
text-text-id-text
Run Code Online (Sandbox Code Playgroud)
分隔符是字符' - '.第三列必须始终为id.我写了下一个regex(在python中)验证字符串:
import re
s = 'col1-col2-col3-id' # any additional text at the end
# is allowed e.g. -col4-col5
print re.match('^(.*-){3}id(-.*)?$', s) # ok
print re.match('^(.*-){1}id(-.*)?$', s) # still ok, is should not be
Run Code Online (Sandbox Code Playgroud)
我尝试添加非贪婪模式,但结果仍然相同:
^(.*?-){1}id(-.*)?$
Run Code Online (Sandbox Code Playgroud)
我的正则表达式中缺少什么?我可以像这样验证字符串:
>>> import re
>>> print re.split('-', 'col1-col2-col3-id')
['col1', 'col2', 'col3', 'id']
Run Code Online (Sandbox Code Playgroud)
然后检查第三个元素是否与id匹配,但我感兴趣的是为什么第一个正则表达式如上所述.
我有几个要从中提取子字符串的字符串。这是一个例子:
/skukke/integration/build/IO/something
Run Code Online (Sandbox Code Playgroud)
我想提取第三个/字符之后的所有内容。在这种情况下,输出应为
/build/IO/something
Run Code Online (Sandbox Code Playgroud)
我尝试过这样的事情
/\/\s*([^\\]*)\s*$/
Run Code Online (Sandbox Code Playgroud)
比赛的结果是
something
Run Code Online (Sandbox Code Playgroud)
这不是我想要的。有人可以帮忙吗?
我试图匹配一组特定的字符,但每个只有1个.
例如,如果该集合是[abcd],我想以任何顺序匹配包含这些确切字符的字符串.
abcd - true
bcad - true
abc - false (need all characters)
abbd - false
abcdd - false
Run Code Online (Sandbox Code Playgroud)
据我所知,目前还没有简单的方法可以通过RegEx实现这一目标,但没有答案足够确凿.
我正在使用python regex库解析一些字符串,目前我发现我的regex太复杂或正在搜索的字符串太长。
这是挂断的示例:
>>> import re
>>> reg = "(\w+'?\s*)+[-|~]\s*((\d+\.?\d+\$?)|(\$?\d+\.?\d+))"
>>> re.search(reg, "**LOOKING FOR PAYPAL OFFERS ON THESE PAINTED UNCOMMONS**") #Hangs here...
Run Code Online (Sandbox Code Playgroud)
我不确定发生了什么。任何帮助表示赞赏!
编辑:这是与我要匹配的示例的链接:Regxr
我正在用java编写并使用带有eclipse的cucumber来搜索具有以下要求的类似IP的字符串
应该接受由句点分隔的四位数序列,其中数字序列定义如下:任何单个数字,任何两位数字字符(如果第一个字符是非零),一个一个后跟一个零,一个或两个后跟任何数字
通过在 Stepdefs.java 文件中编写适当的正则表达式,这就是我写的
@When("^test_ip_address ((?:(\\d)|(1[0-2]\\d)|([1-9]\\d))\\.){3}(?:(\\d)|([1-9]\\d)|(1[0-2]\\d))$")
public void test_ip_address(String arg1) throws Throwable {
System.out.println("test_ip_address true for: " + arg1);
}
Run Code Online (Sandbox Code Playgroud)
现在,当我在 Test.feature 文件中为此方法编写测试(用 Gherkin 语言)时,第一个测试总是失败,测试(应该全部通过)
When test_ip_address 1.2.3.4
When test_ip_address 123.34.76.109
When test_ip_address 123.34.76.109
When test_ip_address 105.22.33.44
Run Code Online (Sandbox Code Playgroud)
这不是价值问题,就像当我重新排序这些测试时,它总是第一个失败,即使我在另一个测试中使用了完全相同的值,它通过了!这是我得到的错误
cucumber.runtime.CucumberException: Arity mismatch: Step Definition 'skeleton.Stepdefs.test_ip_address(String) in file:(file path..)' with pattern [^test_ip_address ((?:(\d)|(1[0-2]\d)|([1-9]\d))\.){3}(?:(\d)|([1-9]\d)|(1[0-2]\d))$] is declared with 1 parameters. However, the gherkin step has 7 arguments [3., 3, null, null, 4, null, null]
Run Code Online (Sandbox Code Playgroud)
我搜索了错误,当测试中的参数数量与方法中的参数数量不同时,即使我使用 (?:) 将字符串作为一个参数传递,我也不知道在哪里这7个论点来自!也不是错误的原因
我需要从多行字符串中获取一组浮点数(正数和负数).例如:-45.124, 1124.325等等
这是我做的:
text.scan(/(\+|\-)?\d+(\.\d+)?/)
Run Code Online (Sandbox Code Playgroud)
虽然它在regex101上工作正常(捕获组0匹配我需要的所有东西),但它在Ruby代码中不起作用.
任何想法为什么会发生以及如何改进?