- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在 Powershell 中使用 Rexex 时遇到了一些麻烦。似乎存在实现错误或其他问题。
我要使用的文本是一个 html 文件,它看起来像这样(示例 1):
<span>[Mobile: %mobile% |] Phone: %telephone% [| Fax: %faxNumber%]</span>
<Span>
问题是,由 html 编辑器引起,我也可能得到类似这样的结果(示例 2):
<span>[Mobile:
%mobile% |] Phone: %telephone% [| Fax: %faxNumber%]</span>
如您所见,我们得到了换行符和 html 转义,修复了空格
。
我的 Powershell 正则表达式如下所示:
$x = $x -ireplace '(?ms)\[(.?){7}Fax(.*?)\]', 'MyReplacement1'
还有这个
$x = $x -ireplace '(?ms)\[(.?){7}Mobile(.*?)\]', 'MyReplacement2'
基本上,[ 标记变量的开始,] 标记变量的结束。由此产生两个问题:
(.?){7}
来允许一些(这里正好是 7 个)字符并避免匹配 之间的空洞部分第一个 [Mobile 附近和 最后一个 ] Fax 附近(如果我使用 (. *?)
而不是 (.?){7}
)。我不确定是否有其他选择,以便我可以在起始 [ 和变量关键字“传真”之间允许任意数量(而不是 7 个)的字符。当添加
之类的东西时,这将有助于避免错误匹配(其中只有 7 个字符是不够的,就像我说的那样 (.*?)
会失败).希望我能够解释清楚(有点难)- 如果没有:请随时提问!我非常感谢专业人士的任何帮助,甚至是正则表达式建议,以避免我现在没有考虑的任何进一步问题......
编辑:(示例 3):
<span>[Mobile:
%mobile% |] Phone: %telephone% [| Fax:
%faxNumber%]</span>
最佳答案
DotAll 模式的诀窍是使用 [\s\S]
而不是 .
。此字符类匹配任何 字符(因为它匹配空格和非空格字符)。 (与 [\w\W]
或 [\d\D]
一样,但空格似乎是一种约定。)
要绕过 7
,您可以简单地禁止在您实际想要匹配的那个之前关闭 ]
(顺便说一下,这也使得 DotAll 变得不必要)。所以像这样的东西应该适合你:
\[([^\]:]*)Fax([^\]]*)\]
它看起来有点丑,但它的意思很简单:
\[ # literal [
( # capturing group 1
[^\]:]* # match as many non-:, non-] characters as possible
) # end of group 1
Fax # literal Fax
( # capturing group 2
[^\]]* # match as many non-] characters as possible
) # end of group 2
\] # literal ]
Further reading on character classes.
请注意,这些模式都不需要多行模式 m
(无论你的还是我的),因为它所做的只是制作 ^
和 $
分别匹配行的开头和结尾。但是没有一个模式包含这些元字符。所以修饰符不做任何事情。
我的控制台输出:
PS> $x = "<span>[Mobile: %mobile% |] Phone: %telephone% [| Fax: %faxNumber%]</span>"
PS> $x -ireplace '\[([^\]:]*)Mobile([^\]]*)\]', 'MyReplacement1'
<span>MyReplacement1 Phone: %telephone% [| Fax: %faxNumber%]</span>
PS> $x -ireplace '\[([^\]:]*)Fax([^\]]*)\]', 'MyReplacement2'
<span>[Mobile: %mobile% |] Phone: %telephone% MyReplacement2</span>
关于html - DotAll 和多行正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13674201/
我的正则表达式需要默认的非换行符匹配点和 re.DOTALL 点(. 匹配换行符)。在单个正则表达式中,我需要前者中的几个和后者中的一个。尽管如此,因为我需要一个点来匹配换行符,所以我必须使用 DOT
到现在为止我用的是这个: "(?s).*\\(.*\\).*\\{.*\\}.*\\;.*" 我在完全请求时应用它(多行也是如此)。问题是当我在 (){} 之间有换行时它也匹配;我不想要。我要匹配的是
我在 Powershell 中使用 Rexex 时遇到了一些麻烦。似乎存在实现错误或其他问题。 我要使用的文本是一个 html 文件,它看起来像这样(示例 1): [Mobile: %mobile%
我想转换这个: def getEmployeeReminders(employeeId: Int, page: Option[Int], pageSize: Option[Int], js_cal
我在单行正则表达式(或 Java 人员的 DOTALL)方面遇到了一些问题。我想在文档上匹配这些设置指令中的每一个。我的正则表达式是这样的: \{\%\s*set\s+(\S+)\s*\%\}.+\{
至此,我如何在 C# Regex 上启用 dotall 标志?我有这个正则表达式。 string reg = ".*"; 例如,我对这个 html 文本进行了正则表达式处理 我的正则表达式在哪
我想匹配 dotall 和非贪婪。这是我的: img(.*?)(onmouseover)+?(.*?)a 然而,这并不是不贪心。此数据与我预期的不匹配: An activity in which st
您好,我是 Perl 的新手,我想知道如何使用它来替换多行模式下的正则表达式。如果可能的话,也制作“。”与断线匹配。 我使用以下表达式: perl -pe 's/text.*end/textChang
您好,我是 Perl 的新手,我想知道如何使用它来替换多行模式下的正则表达式。如果可能的话,也制作“。”与断线匹配。 我使用以下表达式: perl -pe 's/text.*end/textChang
我一直在用头撞键盘,通过 Google 和我能找到的所有 Python 文档来寻求启发,但找不到我遇到的问题的答案。 我在网站上运行了以下正则表达式,但 Python 坚持在其上设置 re.DOTAL
我有以下字符串,我尝试将相应“foo”中的字符串与“bar=1”、“bar=2”或“bar=3”进行匹配。所以一次只能进行一场比赛。 file_header foo lorem ipsum \pope
不是正则表达式专家,但我知道的足够危险,需要一些关于我正在处理的表达式的帮助。长话短说,最近的一次数据库升级使我支持的遗留应用程序的字符串文字中的数千个查询无效。我正在编写一些表达式来捕获其中的大部分
我正在尝试用 Python 重现这个正则表达式:https://regex101.com/r/tP1bS4/2 示例 entry 数据如下: [ 10.0.7.58/54648 -> 31.221.2
是否有用于 boost::regex 的 DOTALL 匹配标志?文档显示: static const match_flag_type match_not_dot_newline; static co
我正在尝试从使用系统命令创建的文件中获取某些值。文件是有序的,正则表达式正在运行,直到我到达“换行符”。我试图让它以多种方式获取其他值(value),但我似乎无法弄清楚。我哪里出错了? 这是代码 su
我是一名律师和 Python 初学者,所以我既 (a) 愚蠢又 (b) 完全不在我的轨道上。 我正在尝试将正则表达式模式应用于文本文件。该模式有时可以跨越多条线。我对文本文件中的这些行特别感兴趣: C
我知道 DOTALL 可用于完全成熟的 Pattern+Matcher 类。 但如果我只想使用 String.matches() , 有没有办法告诉它使用 DOTALL 修饰符? 最佳答案 您可以使用
我有一个字符串如下: Acid Exposure (pH) Total Total Normal Clearance pH : Channel
我有一个像这样的字符串: #a b #c d 我想将其分成以 # 开头的部分: #a b 和 #c d 我尝试使用正则表达式执行此操作,但发现无法正常工作。 我认为以下方法可行: var test='
我一直在尝试对相当大的文本 block 调用 re.sub。奇怪的是,看起来在 16 次替换后突然停止替换任何东西。但如果我去掉 DOTALL 标志,它就会突然再次起作用。 我的输入文件: .
我是一名优秀的程序员,十分优秀!