在Mathematica中使用正则匹配遇到的一个问题
mathematica吧
全部回复
仅看楼主
level 1
这是原文:
这是我希望得到的结果:
但是当我给这个模式命名为"x"后返回结果变成了:
希望有人可以帮忙解答一下这个问题,并帮忙解决下,谢谢!
源代码文件:pan.baidu.com/s/1qqa-Kq6iQwikdLN8IVOeZg 提取码:q5s6
(注:知乎上的: zhihu.com/question/464896703 是我提的问题)
2021年06月18日 13点06分 1
吧务
level 15
……感觉像是bug。下面是个简化样本:
a = "\[OpenCurlyDoubleQuote]
\[OpenCurlyDoubleQuote]A
\[CloseCurlyDoubleQuote]b";
StringCases[a,
x : RegularExpression[
"\[OpenCurlyDoubleQuote].*(?<!\[CloseCurlyDoubleQuote])A\n\n\
.*\[CloseCurlyDoubleQuote]"]]
StringCases[a,
RegularExpression[
"\[OpenCurlyDoubleQuote].*(?<!\[CloseCurlyDoubleQuote])A\n\n\
.*\[CloseCurlyDoubleQuote]"]]
虽然我不懂正则,但 x: 是不应该对匹配结果有影响的。已向WRI反馈,但反馈大概没这么快……
2021年07月03日 04点07分 2
第一个正则的.应该包含了\n, 将正则的.替换为(.|\n)或者[^\n]结果就相同了。
2021年07月03日 13点07分
@隨意超 可 x: 不应该影响结果啊,这俩总有一个是错的。
2021年07月03日 13点07分
@xzcyr 确实不应该影响结果。似乎是默认选项不同,明确指定使用(?s)或取消(?-s)可以的到相同结果,文档好像没有说明默认选项
2021年07月03日 13点07分
吧务
level 15
变通倒是不难的:
StringCases[a,
x : ("「" ~~ a__ ~~ "」" /; (StringFreeQ[a, {"「", "」"}] && ! StringFreeQ[a, "<br>"])) ->
x]
不过上面也说了我不懂正则,所以不确定我这个是不是你要的规则。
2021年07月03日 05点07分 3
吧务
level 15
WRI回信了,“I have been able to reproduce the issue and have reported it to our developers. I have included your contact information with my report. I also want to add that the recommended way of using named patterns with RegularExpression is to use a capturing group. ” capturing group 好像是正则表达式的什么术语?
2021年08月07日 05点08分 4
很久以前就碰见过问题,导致一直以来我都不使用RegularExpression,这下官方算是承认有问题了……
2021年08月07日 10点08分
capturing group是捕获组,就是正则里用括号括起来的部分可以用\1、\2之类的表示。大概意思就是你既然用正则了那就直接用正则的捕获组就行了,没必要再用命名模式。
2021年08月08日 15点08分
level 1
感谢吧主的回答
我使用
StringCases[a,s : ("「" ~~ Shortest[Except["」"] ..] ~~ "\n" .. ~~ Shortest[__] ~~
"」") :> StringReplace[s, "<br>\n\n" -> ""]
解决了这个问题
并在最后发现这个问题是爬虫预处理上的问题,本身不应该存在的
2021年08月10日 11点08分 5
上面这个对应的正则应该是: 「.*(?<!」)<br>((.|\n)(?<!」))*」
2021年08月11日 09点08分
1