相关疑难解决方法(0)

正则表达式匹配外括号

我需要一个正则表达式来选择两个外括号之间的所有文本.

例: some text(text here(possible text)text(possible text(more text)))end text

结果: (text here(possible text)text(possible text(more text)))

regex

266
推荐指数
12
解决办法
32万
查看次数

使用正则表达式解析HTML:为什么不呢?

似乎stackoverflow上的每个问题,其中提问者使用正则表达式从HTML中获取一些信息将不可避免地有一个"答案",表示不使用正则表达式来解析HTML.

为什么不?我知道那里有引用 - 不引用"真正的"HTML解析器,比如Beautiful Soup,我相信它们是强大而有用的,但是如果你只是做一些简单,快速或肮脏的事情,那么为什么当一些正则表达式语句运行得很好时,麻烦​​使用如此复杂的东西?

此外,是否有一些基本的东西,我不了解正则表达式,这使得它们一般是解析的错误选择?

regex html-parsing

202
推荐指数
10
解决办法
6万
查看次数

如何拆分但在python中忽略带引号的字符串中的分隔符?

我需要在分号上分割这样的字符串.但我不想拆分字符串('或')内的分号.我没有解析文件;只是一个没有换行符的简单字符串.

part 1;"this is ; part 2;";'this is ; part 3';part 4;this "is ; part" 5

结果应该是:

  • 第1部分
  • "这是;第2部分;"
  • '这是 ; 第3部分'
  • 第4部分
  • 这是"是;部分"5

我想这可以用正则表达式完成,但如果没有; 我对另一种方法持开放态度.

python regex

63
推荐指数
5
解决办法
5万
查看次数

在C#中迭代字符串中单个字符的最快方法是什么?

标题是问题.以下是我尝试通过研究回答这个问题.但我不相信我不知情的研究,所以我仍然提出问题(在C#中用字符串中的单个字符迭代的最快方法是什么?).

偶尔我想逐个循环遍历字符串的字符,例如在解析嵌套标记时 - 这是正则表达式无法完成的.我想知道最快的方法是迭代字符串中的各个字符,特别是非常大的字符串.

我自己做了一堆测试,结果如下.然而,有许多读者对.NET CLR和C#编译器有更深入的了解,所以我不知道我是否遗漏了一些明显的东西,或者我是否在测试代码中犯了错误.所以我征集你的集体回应.如果有人深入了解字符串索引器的实际工作方式,那将非常有帮助.(这是C#语言功能在幕后编译成其他东西吗?还是内置于CLR中的东西?).

使用流的第一种方法直接取自线程中接受的答案:如何从字符串生成流?

测试

longString是一个9910万字符的字符串,由89个纯文本版本的C#语言规范组成.显示的结果是20次迭代.如果存在'启动'时间(例如方法#3中隐式创建的数组的第一次迭代),我会单独测试它,例如在第一次迭代后断开循环.

结果

从我的测试中,使用ToCharArray()方法在char数组中缓存字符串是迭代整个字符串的最快速度.ToCharArray()方法是一项前期费用,对单个字符的后续访问速度略快于内置索引访问器.

                                           milliseconds
                                ---------------------------------
 Method                         Startup  Iteration  Total  StdDev
------------------------------  -------  ---------  -----  ------
 1 index accessor                     0        602    602       3
 2 explicit convert ToCharArray     165        410    582       3
 3 foreach (c in string.ToCharArray)168        455    623       3
 4 StringReader                       0       1150   1150      25
 5 StreamWriter => Stream           405       1940   2345      20
 6 GetBytes() => StreamReader       385       2065   2450      35
 7 GetBytes() => BinaryReader       385       5465   5850      80 …
Run Code Online (Sandbox Code Playgroud)

c# string

55
推荐指数
4
解决办法
3万
查看次数

正则表达式中的递归模式

这与正则表达式非常相关,以匹配外部括号,但是,我特别想知道如何或是否可以执行此正则表达式的递归模式我还没有找到使用这个策略的python示例,所以认为这应该是一个有用的问题!

我已经看到 了一些 索赔 递归的模式可以用来匹配平衡括号,但使用Python的没有例子正则表达式包(注:重支持递归模式,你需要使用正则表达式).

一种说法是语法在b(?:m|(?R))*e哪里:

b是什么开始构造,m是什么可以发生在构造的中间,并且e是在构造的末尾可以发生的


我想在以下内容中提取外部大括号的匹配项:

"{1, {2, 3}} {4, 5}"
["1, {2, 3}", "4, 5"]  # desired
Run Code Online (Sandbox Code Playgroud)

请注意,对于括号,这很容易做到:

re.findall(r"{([^{}]*)}", "{1, {2, 3}} {4, 5}")
['2, 3', '4, 5']
Run Code Online (Sandbox Code Playgroud)

(在我的例子中,我使用的是finditer(在匹配对象上),请看这里.)

所以我曾希望以下或某些变体可行:

regex.findall(r"{(:[^{}]*|?R)}", "{1, {2, 3}} {4, 5}")
regex.findall(r"({(:[^{}]*|?R)})", "{1, {2, 3}} {4, 5}")
regex.findall(r"({(:.*|(?R))*})", "{1, {2, 3}} {4, 5}")
regex.findall(r"({(:.*)|(?R)*})", …
Run Code Online (Sandbox Code Playgroud)

python regex recursive-regex

47
推荐指数
2
解决办法
2万
查看次数

获取Ruby中String对象的括号之间的内容

我有一个像这样的字符串:

Hi my name is John (aka Johnator).

获得括号之间的最佳方法(包括括号)是什么?

ruby regex string

16
推荐指数
1
解决办法
1万
查看次数

什么是正则表达式?

我知道这个问题似乎很愚蠢,但事实并非如此.我的意思是它究竟是什么.我对解析问题有一个公平的理解.我知道BNF/EBNF,我在我的一个大学课程中编写语法来解析简单的无语境语言.我以前从未见过正则表达式!我记得的唯一一件事就是无上下文语法可以完成正则表达式所能做的所有事情.

此外,通常的编码解析字符串是否有用?一个简单的例子会有所帮助.

regex parsing

13
推荐指数
2
解决办法
839
查看次数

C#Regex - 如何从字符串中删除多个配对的括号

我试图弄清楚如何使用C#正则表达式从字符串中删除所有实例配对括号.应删除括号和它们之间的所有文本.括号并不总是在同一条线上.此外,它们可能是嵌套的括号.字符串的一个例子是

This is a (string). I would like all of the (parentheses
to be removed). This (is) a string. Nested ((parentheses) should) also
be removed. (Thanks) for your help.
Run Code Online (Sandbox Code Playgroud)

所需的输出应如下:

This is a . I would like all of the . This  a string. Nested  also
be removed.  for your help.
Run Code Online (Sandbox Code Playgroud)

c# regex parentheses

12
推荐指数
1
解决办法
5470
查看次数

如何从JAVA中的字符串中删除转义字符

我有输入字符串"\\{\\{\\{testing}}}",我想删除所有"\".要求o/p : "{{{testing}}}".

我正在使用以下代码来完成此任务.

protected String removeEscapeChars(String regex, String remainingValue) {
    Matcher matcher = Pattern.compile(regex, Pattern.CASE_INSENSITIVE).matcher(remainingValue);
    while (matcher.find()) {
        String before = remainingValue.substring(0, matcher.start());
        String after = remainingValue.substring(matcher.start() + 1);
        remainingValue = (before + after);
    }
    return remainingValue;
}
Run Code Online (Sandbox Code Playgroud)

我正在通过正则表达式"\\\\{.*?\\\\}".

代码仅在第一次出现"\ {"时正常工作,但不适用于所有出现的情况.查看以下输出以了解不同的输入.

  1. i/p:"\\{testing}"- o/p:"{testing}"
  2. i/p:"\\{\\{testing}}"- o/p:"{\\{testing}}"
  3. i/p:"\\{\\{\\{testing}}}"- o/p:"{\\{\\{testing}}}"

我想要"\"从传递的i/p字符串中删除,所有"\\{"应该替换为"{".

我觉得问题在于正则表达式值,即"\\\\{.*?\\\\}".

任何人都可以让我知道什么应该是获得所需的o/p的正则表达式值.

java regex

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

使用正则表达式进行数学集验证

我需要验证给定String的用户并验证它是否是有效的Set,可能是包含内部集的集合.例子:

 1) {1, 2, 3, 4} = valid
 2) {1, 2, {3, 4}, 5} = valid
 3) 1, 2, 3, 4 = invalid (missing brackets)
 4) {1, 2, {3, 4, 5} = invalid (missing inner bracket)
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的正则表达式(为便于阅读而分解):

String elementSeparator = "(,\\s)?";
String validElement = "(\\{?[A-Za-z0-9]*\\}?" + elementSeparator + ")*";
String regex = "^\\{" + validElement + "\\}$";
Run Code Online (Sandbox Code Playgroud)

目前它接受带有可选开始和结束括号的集合,但我需要它只接受它们是否存在,而不是如果内部集合缺少一个括号.在我当前的实现中,第4个示例被接受为有效集.

我怎么能做到这一点?

java regex

8
推荐指数
1
解决办法
326
查看次数

标签 统计

regex ×9

c# ×2

java ×2

python ×2

string ×2

html-parsing ×1

parentheses ×1

parsing ×1

recursive-regex ×1

ruby ×1