是否有正则表达式的风格,允许我计算*和+运算符匹配的重复次数?我特别想知道它是否可以在.NET平台下运行.
这就是我正在做的事情
a = "%span.rockets#diamonds.ribbons.forever"
a = a.match(/(^\%\w+)([\.|\#]\w+)+/)
puts a.inspect
Run Code Online (Sandbox Code Playgroud)
这就是我得到的
#<MatchData "%span.rockets#diamonds.ribbons.forever" 1:"%span" 2:".forever">
Run Code Online (Sandbox Code Playgroud)
这就是我要的
#<MatchData "%span.rockets#diamonds.ribbons.forever" 1:"%span" 2:".rockets" 3:".#diamonds" 4:".ribbons" 5:".forever">
Run Code Online (Sandbox Code Playgroud)
救命?我尝试过但失败了:(
我re在代码中使用python正则表达式(模块),并注意到在这些情况下的不同行为:
re.findall(r'\s*(?:[a-z]\))?[^.)]+', 'a) xyz. b) abc.') # non-capturing group
# results in ['a) xyz', ' b) abc']
Run Code Online (Sandbox Code Playgroud)
和
re.findall(r'\s*(?<=[a-z]\))?[^.)]+', 'a) xyz. b) abc.') # lookbehind
# results in ['a', ' xyz', ' b', ' abc']
Run Code Online (Sandbox Code Playgroud)
我需要得到的就是正义['xyz', 'abc']。为什么示例的行为有所不同,又如何获得期望的结果?
我有两种不同语言的正则表达式,它们产生相同的奇数结果(javaScript和Flash).我想知道的不是如何解决它,而是为什么会发生这种行为?
正则表达式:
\[(\\{2}|\\\]|[^\]])*\]
Run Code Online (Sandbox Code Playgroud)
这里的目标是匹配一个括号中的字符串,并确保我不会停留在转义括号中.
如果我有文本输入[abcdefg]它是正确匹配的,但作为捕获组的一部分返回的唯一内容是g,在我期望的位置abcdefg.如果我将表达式更改为
\[((?:\\{2}|\\\]|[^\]])*)\],那么我得到我想要的结果.
那为什么会这样呢?这会在其他语言中保持一致吗?
注意:简化表达式以\[([^\]])*\]产生相同的问题.
javascript regex actionscript-3 capturing-group ecmascript-5
我正在寻找一个正则表达式,它仅在所有字符都是唯一的情况下才匹配特定长度的特定字符组。
对于给定的字符串示例:
123132213231312321112122121111222333211221331
123, 132, 213, 231, 312, 321匹配 和
112, 122, 121, 111, 313, 322, 221, 323, 131等不匹配。
我试过了,(?:([0-9])(?!.{3}\1)){3}但完全错了
我正在尝试使用一个正则表达式模式解析字符串.
这是模式:
(\")(.+)(\")\s*(\{)
Run Code Online (Sandbox Code Playgroud)
这是要解析的文本:
"base" {
Run Code Online (Sandbox Code Playgroud)
我想找到这4个捕获组:
1. "
2. base
3. "
4. {
Run Code Online (Sandbox Code Playgroud)
我正在使用以下代码尝试捕获这些组
class func matchesInCapturingGroups(text: String, pattern: String) -> [String] {
var results = [String]()
let textRange = NSMakeRange(0, count(text))
var index = 0
if let matches = regexp(pattern)?.matchesInString(text, options: NSMatchingOptions.ReportCompletion, range: textRange) as? [NSTextCheckingResult] {
for match in matches {
// this match = <NSExtendedRegularExpressionCheckingResult: 0x7fac3b601fd0>{0, 8}{<NSRegularExpression: 0x7fac3b70b5b0> (")(.+)(")\s*(\{) 0x1}
results.append(self.substring(text, range: match.range))
}
}
return results
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,它只能找到一个范围(0, 8)等于的组:"base" {.所以它找到一个组,它是整个字符串而不是4个组. …
编辑
在正则表达式中,匹配的捕获组是否可以替换为相同的匹配更改(将一个字符替换为另一个字符)?
原问题
我正在将产品列表转换为 CSV 文本文件。列表中的每一行都有:number name[ description] price格式如下:
1 PRODUCT description:120
2 PRODUCT NAME TWO second description, maybe:80
3 THIRD PROD:18
Run Code Online (Sandbox Code Playgroud)
生成的格式还必须包含一个slug(而-不是)作为第二个字段:
1 PRODUCT:product-1:description:120
2 PRODUCT NAME TWO:product-name-two-2:second description, maybe:80
3 THIRD PROD:third-prod-3::18
Run Code Online (Sandbox Code Playgroud)
我正在使用的正则表达式是这样的:
(\d+) ([A-Z ]+?)[ ]?([a-z ,]*):([\d]+)
替换字符串是:
`\1 \2:\L$2-\1:\3:\4
Run Code Online (Sandbox Code Playgroud)
这样我的结果是:
1 PRODUCT:product-1:description:120
2 PRODUCT NAME TWO:product name two-2:second description, maybe:80
3 THIRD PROD:third prod-3::18
Run Code Online (Sandbox Code Playgroud)
-我错过的是第二个字段中需要的分隔符连字符,即\2用“ -”而不是“ ”进行分组。
是否可以使用单个正则表达式,或者我应该进行第二遍?
(目前我使用 Sublime 文本编辑器)
谢谢。
语境。我正在开发一个 Lexer/Tokenizing 引擎,它将使用正则表达式作为后端。词法分析器接受定义令牌类型/ID 的规则,例如
<identifier> = "\\b\\w+\\b"。
正如我所设想的,为了进行基于正则表达式匹配的标记化,正则表达式定义的所有规则都包含在捕获组中,并且所有组都由 OR 分隔。
当执行匹配时,我们生成的每个匹配都必须有一个与其匹配的捕获组的索引。我们使用这些 ID 将匹配映射到令牌类型。
那么这个问题的问题就出现了——如何获取群组的ID?
这里有类似的问题,但它没有为我的具体问题提供解决方案。
这正是我的问题,但它是在 JS 中,我需要一个 C/C++ 解决方案。
假设我有一个正则表达式,由用 OR 分隔的捕获组组成:
(\\b[a-zA-Z]+\\b)|(\\b\\d+\\b)
它匹配整数或字母单词。
我的问题要求可以知道正则表达式子匹配匹配的捕获组的索引,例如在匹配字符串时
foo bar 123
将进行 3 次迭代。每次迭代的匹配项的组索引将为0 0 1,因为前两个匹配项与第一个捕获组匹配,最后一个匹配项与第二个捕获组匹配。
我知道在标准std::regex库中这并不完全可能(regex_token_iterator不是解决方案,因为我不需要跳过任何匹配)。
boost::regex我对PCRE 正则表达式库了解不多。
完成这项任务的最佳方法是什么?使用哪个库和方法?
这是一个降价文件example.md我有:
## New language
Raku is a new language different from Perl.
## what does it offer
+ Object-oriented programming including generics, roles and multiple dispatch
+ Functional programming primitives, lazy and eager list evaluation, junctions, autothreading and hyperoperators (vector operators)
+ Parallelism, concurrency, and asynchrony including multi-core support
+ Definable grammars for pattern matching and generalized string processing
+ Optional and gradual typing
This code will be evaluated.
```{raku evaluate=TRUE}
4/5
```
Rakudo is a compiler for …Run Code Online (Sandbox Code Playgroud) 我试图从字符串形式的对象中挑选出所有值。我已经创建了正则表达式,但我仍然遇到无法删除引号并碰壁的问题......
这是我得到的结果与期望结果的比较的代码:
const regex = /(?:"([^"]+)\")|([^=",{}.]+)/g
const string = 'obj{a="0",b="1",domain="a-ss.test.io:666",f="g",range="3.594e-04...4.084e-04"}'
const matches = string.match(regex)
console.log(matches)
Run Code Online (Sandbox Code Playgroud)
这是结果数组:
[
"obj",
"a",
"\"0\"",
"b",
"\"1\"",
"domain",
"\"a-ss.test.io:666\"",
"f",
"\"g\"",
"range",
"\"3.594e-04...4.084e-04\""
]
Run Code Online (Sandbox Code Playgroud)
虽然我想要的结果是:
[
"obj",
"a",
"0",
"b",
"1",
"domain",
"a-ss.test.io:666",
"f",
"g",
"range",
"3.594e-04...4.084e-04"
]
Run Code Online (Sandbox Code Playgroud)
有谁知道如何从返回的每个数组值中删除引号?
capturing-group ×10
regex ×10
javascript ×2
python ×2
.net ×1
c++ ×1
ecmascript-5 ×1
ios ×1
lexer ×1
lookbehind ×1
match ×1
matching ×1
parsing ×1
perl6 ×1
raku ×1
repeat ×1
replace ×1
ruby ×1
swift ×1
tokenize ×1