正则表达式匹配引号之间的整个单词

时间:2014-06-10 21:29:35

标签: regex

我试图使用正则表达式来匹配双引号中的整个单词。这些是我的两个陈述和一组示例文本。希望结合这两个正则表达式。

"(?:[^\\"]+|\\.)*"
\b\w+\b

img

尝试获得最终结果:

otpt

忽略zzz,这些是单引号的替代品。对认识这本书的任何人都有好处。

非常感谢,对于潜在的混淆道歉 - 第一次在这里提问。

编辑:解决 - 为混乱的问题和图片道歉,我使用的是Python 2.7。使用链接到@HamZa的正则表达式并修改为Python 2.7并忽略换行符。

(?: “?)\ W +(=(?:?(?:[^”] “){2})的(?:[^”?] “[^”] *?(?:$)))

goo.gl/VHvS2o

2 个答案:

答案 0 :(得分:0)

最简单的解决方案是按照您的建议使用两个表达式。这将在双引号中提取字符串:

/"[^"]+"/g

然后遍历第一个表达式的结果,将它们传递给第二个表达式,只提取单词匹配:

/\w+/g

请注意,尽管语言在单词字符的实现方面存在很大差异。例如,JavaScript对国际字符的支持非常差,但对于英语,这应该没问题。如果你需要支持更大的字符集,这个表达式可能是第二个字符集的一个很好的替代品,但你需要用你正在处理的材料进行自己的测试:

/[^" ]+/g

如果您正在使用PHP或Java,它们支持lookbehind / lookahead匹配,您可以将这两个操作组合成一个表达式,但通常这些操作更容易出错并且更难调试。这就是为什么我建议选择拆分解决方案。

答案 1 :(得分:0)

为了让其他用户认为你的问题意味着别的东西(并想知道怎么做),我会回答他们可能认为的意思,但我意识到这不是你的意思正在寻找(其他答案可能就足够了,我希望):

我在Python 3.x中使用正则表达式,但我不知道你在使用什么。所以,这就是为什么我的答案是Python。以下是在Python 3.4中如何在双引号内查找和替换整个单词的示例:

import re
s='"Okay", "this" is a "test"'
re.sub(r"(\")\b\S+\b(\")", r"\1~\2", s)

#The result is this string: '"~", "~" is a "~"'

如果每个单词,并且只有一个单词用双引号括起来(没有标点符号),则此方法有效。

对于你的实际意思,如果另一个答案是不够的,你可以使用正向前瞻和后看正则表达式来包括前后的引号(使用空格触及引号作为指导,帮助计算机识别何时它是在引号之外,因为在引号内的双引号之后通常没有直接的空格,并且通常在它之外。你可能需要做一些其他的事情才能让它发挥作用。如果两步法更容易,我绝对推荐它! (除非你只是想学习新东西。)我认为前瞻和外观也可能是贪婪的。所以要小心。希望有人能给你一个更简单的答案或者一个有效的例子。

如果您不熟悉它们,请检查此URL以了解前瞻和后视的说明: https://docs.python.org/3.4/library/re.html

如果可能的话,您可能还想考虑除正则表达式之外的其他选择。各种HTML工具可能有一些东西可以帮助你制作这样的功能,因为它们使用开始和结束标签(类似于打开和关闭引号)并且可能用于操纵其中的内容。