相关疑难解决方法(0)

我的正则表达式匹配太多了.我怎么让它停下来?

J0000000: Transaction A0001401 started on 8/22/2008 9:49:29 AM
J0000010: Project name: E:\foo.pf
J0000011: Job name: MBiek Direct Mail Test
J0000020: Document 1 - Completed successfully
Run Code Online (Sandbox Code Playgroud)

我有这个巨大的丑陋的字符串,我正在尝试使用正则表达式从中提取片段.

在这种情况下,我想抓住"项目名称"之后的所有内容,直到它说"J0000011:"的部分(每次11将是一个不同的数字).

这是我一直在玩的正则表达式

Project name:\s+(.*)\s+J[0-9]{7}:
Run Code Online (Sandbox Code Playgroud)

问题是它不会停止,直到它碰到J0000020:最后.

如何在第一次出现J [0-9] {7}时使正则表达式停止?

regex

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

使用preg_replace仅替换第一个匹配项

我有一个结构类似于的字符串:'aba aaa cba sbd dga gad aaa cbz'.字符串每次都可能有点不同,因为它来自外部源.

我想只替换第一次出现'aaa'但不替换其他出现.可能吗?

php regex preg-replace

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

正则表达式首次出现?

假设我有以下字符串:

这是为了测试而进行的测试.这只是一个测试.结束.

我想选择this is a testthis is only a test.我需要做什么?

我试过的以下正则表达式产生了一个愚蠢的结果:

this(.*)test (我也想捕捉它之间的东西)

回报 this is a test for the sake of testing. this is only a test

看起来这可能是我忘记的事情.

regex

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

使用正则表达式在多个HTML标记之间获取文本

使用正则表达式,我希望能够在多个DIV标记之间获取文本.例如,以下内容:

<div>first html tag</div>
<div>another tag</div>
Run Code Online (Sandbox Code Playgroud)

输出:

first html tag
another tag
Run Code Online (Sandbox Code Playgroud)

我使用的正则表达式模式只匹配我的最后一个div标签并错过了第一个.码:

    static void Main(string[] args)
    {
        string input = "<div>This is a test</div><div class=\"something\">This is ANOTHER test</div>";
        string pattern = "(<div.*>)(.*)(<\\/div>)";

        MatchCollection matches = Regex.Matches(input, pattern);
        Console.WriteLine("Matches found: {0}", matches.Count);

        if (matches.Count > 0)
            foreach (Match m in matches)
                Console.WriteLine("Inner DIV: {0}", m.Groups[2]);

        Console.ReadLine();
    }
Run Code Online (Sandbox Code Playgroud)

输出:

匹配发现:1

内部DIV:这是另一个测试

html c# regex

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

与grep的非贪婪匹配

据我所知,非贪心匹配不是基本正则表达式(BRE)和扩展正则表达式(ERE)的一部分.然而,不同版本grep(BSD和GNU)的行为似乎表明其他方面.

例如,我们来看下面的例子.我有一个字符串说:

string="hello_my_dear_polo"
Run Code Online (Sandbox Code Playgroud)

使用GNU grep:

以下是hello从字符串中提取的几次尝试.

BRE尝试:

$ grep -o "hel.*\?o" <<< "$string"
hello_my_dear_polo
Run Code Online (Sandbox Code Playgroud)

输出产生整个字符串,这表明非贪婪量词对BRE不起作用.请注意,我只是逃脱了,?因为*它没有失去意义,也不需要转义.

ERE尝试:

$ grep -oE "hel.*?o" <<< "$string"
hello_my_dear_polo
Run Code Online (Sandbox Code Playgroud)

启用该-E选项也会产生相同的输出,表明非贪婪匹配不是ERE的一部分.由于我们使用ERE,因此不需要转义.

PCRE尝试:

$ grep -oP "hel.*?o" <<< "$string"
hello
Run Code Online (Sandbox Code Playgroud)

启用-PPCRE选项表明非贪婪量词是其中的一部分,因此我们得到了所需的输出hello.由于我们使用PCRE,因此不需要转义.

使用BSD grep:

以下是hello从字符串中提取的几次尝试.

BRE尝试:

$ grep -o "hel.*\?o" <<< "$string"
Run Code Online (Sandbox Code Playgroud)

使用BRE我没有得到BSD的输出grep.

ERE尝试:

$ grep -oE "hel.*?o" <<< "$string"
hello
Run Code Online (Sandbox Code Playgroud)

启用该-E选项后,我很惊讶我能够提取所需的输出.我的问题是我从这次尝试得到的输出.

PCRE尝试:

$ grep …
Run Code Online (Sandbox Code Playgroud)

regex grep bsd gnu

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

正则表达式只捕获第一场比赛

我一直在谷歌上搜索堆栈溢出提供的推荐问题.但是,我没有找到答案.

我想用正则表达式解析一个字符串,字符串的例子是

Lot: He said: Thou shalt not pass!

我想Lot作为一个群体捕获,并且He said: Thou shalt not pass!.但是,当我使用我的(.+): (.+)模式时,它会返回

Lot: He said:Thou shalt not pass!

是否可以He said: Thou shalt not pass使用正则表达式捕获?

regex lookaround regex-lookarounds

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

如何使用 mongo 导出以字符串格式导出日期时间字段?

我正在尝试使用 mongoexport 从 mongo 导出整个集合。我发现的关于日期的大多数答案都涉及查询。我不做查询。我将整个表转储为 JSON 格式。日期时间字段的导出如下:

"dateOfBirth": {
  "$date": "1999-02-02T00:00:00.000Z"
}
Run Code Online (Sandbox Code Playgroud)

我只想要日期时间字段的字符串表示形式,所以它看起来像:

"dateOfBirth": "1999-02-02T00:00:00.000Z"
Run Code Online (Sandbox Code Playgroud)

我不知道我们的 mongo 的确切版本,但它是最近的。

我该怎么做呢?

export mongodb mongoexport

6
推荐指数
1
解决办法
1492
查看次数

Python Regex与YAML Front Matter相匹配

我在制作正则表达式以匹配YAML Front Matter方面遇到了麻烦

这是我想要匹配的最重要的事情:

    ---
    name: me
    title: test
    cpu: 1
    ---
Run Code Online (Sandbox Code Playgroud)

这是我认为会起作用的:

re.search( r'^(---)(.*)(---)$', content, re.MULTILINE)
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

python regex

5
推荐指数
1
解决办法
1891
查看次数

用regex,python多次替换两个字符串之间的字符串

我正在尝试使用正则表达式来查找和替换文件中两个字符串之间的文本字符串.我遇到的问题是我希望它在找到"结束"字符串后"中断",而是替换第一个"开始"字符串和最后一个"结束"字符串之间的所有文本.

_copyright = 'BEGIN COPYRIGHT \n The replacing string \n END COPYRIGHT'

_file = re.sub(r'BEGIN COPYRIGHT[\w\s]*END COPYRIGHT',_copyright, _file)
Run Code Online (Sandbox Code Playgroud)

开始版权

FOO

结束版权

开始版权

酒吧

结束版权

所以foo和bar都应该成为"替换字符串",但文档变成了

开始版权

替换字符串

结束版权

python regex replace

2
推荐指数
1
解决办法
1584
查看次数

pcregrep匹配在第一次出现时停止

我正在使用'pcregrep'在UNIX中实现多行搜索.我希望匹配在第一次出现时停止.

例如,如果我在文件中有下面的文字:

mynameishin
hahahain
internetin
fdhsufsdhuiain
djbssdvbsbsduiain
sduigsyubsuvasdyivsyifvasin
Run Code Online (Sandbox Code Playgroud)

我想打印到'name'之后第一次出现'ain'.所以我只需要打印:

mynameishin
hahahain
Run Code Online (Sandbox Code Playgroud)

我正在执行:

pcregrep -M 'name.*ain' *.txt
Run Code Online (Sandbox Code Playgroud)

但是我得到的输出为:

mynameishin
hahahain
internetin
fdhsufsdhuiain
djbssdvbsbsduiain
Run Code Online (Sandbox Code Playgroud)

regex pcregrep

2
推荐指数
1
解决办法
562
查看次数

PHP正则表达式:匹配最接近的一个

我有这样的字符串

<div><span style="">toto</span> some character <span>toto2</span></div>
Run Code Online (Sandbox Code Playgroud)

我的正则表达式:

/(<span .*>)(.*)(<\/span>)/
Run Code Online (Sandbox Code Playgroud)

我使用preg_match并返回整个字符串

<span style="">toto</span> some character <span>toto2</span>
Run Code Online (Sandbox Code Playgroud)

我希望它返回:

<span style="">toto</span>
and
<span>toto2</span>
Run Code Online (Sandbox Code Playgroud)

我需要做什么才能实现这一目标?谢谢.

php regex html-parsing

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

如何在ruby中给定两个字符串之间打印字符串?

我有一个字符串(多行),我需要获得2个给定字符串之间的字符串.

例如:

multiline_string = %q{testtestbegin
test1
test2
test3
end
test
xxx
xxx
begin
yyy
yyy
end
hhh
}
Run Code Online (Sandbox Code Playgroud)

我需要找到'begin'和'end'之间的字符串.有2场比赛.我需要打印这两个.有没有办法在正则表达式中执行此操作,如(?<=begin)(.*)(?=end) Kindly帮助.

ruby regex string

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