Regex 更改“";”乳胶样式的引号
我正在用LaTeX编辑一本书,它的引号语法不同于简单的Regex 更改“";”乳胶样式的引号,regex,tex,Regex,Tex,我正在用LaTeX编辑一本书,它的引号语法不同于简单的“字符。因此我想将“此处引用的文本”转换为“此处引用的文本” 我有50个文本文件,里面有很多引文。我试图编写一个正则表达式,用`替换第一个“,然后用第二个“与”,但我失败了。我在网上搜索并询问了一些朋友,但我没有成功。最接近于替换第一个引号的是 s/“[a-z]/`/g 但这显然是错误的,因为 “此处引用的文本” 将成为 “`uoted text here” 如何解决我的问题?尝试将单词分组: sed 's/"\([a-z]\)/``\
“
字符。因此我想将“此处引用的文本”
转换为“此处引用的文本”
我有50个文本文件,里面有很多引文。我试图编写一个正则表达式,用`
替换第一个“
,然后用第二个“
与”
,但我失败了。我在网上搜索并询问了一些朋友,但我没有成功。最接近于替换第一个引号的是
s/“[a-z]/`/g
但这显然是错误的,因为
“此处引用的文本”
将成为
“`uoted text here”
如何解决我的问题?尝试将单词分组:
sed 's/"\([a-z]\)/``\1/'
在我的电脑上:
abhishekm71@PC:~$ echo \"hello\" | sed 's/"\([a-z]\)/``\1/'
``hello"
我对你的方法有点困惑。如果使用
s/`/“[a-z]/g
,不是应该反过来吗?但是,我认为使用以下方法会更好:
s/``(.*?)''/"\1"/g
(.*)
捕获`
和'
之间的内容
\1
包含此捕获
如果你想要的是相反的结果(即我错误地解释了你的问题),那么我建议:
s/"(.*?)"/``\1''/g
其工作原理与前面的正则表达式相同。使用以下方法处理多个引用,一步替换所有的
“
echo '"Quote" she said, "again."' | sed "s/\"\([^\"]*\)\"/\`\`\1''/g"
[^\“]*
避免了不精确匹配的需要。它有点依赖于您的输入文件(引号是否总是成对的,或者是否可以有省略?)。我建议使用以下健壮的方法:
sed 's/"\([0-9a-zA-Z]\)/``\1/g'
sed "s/\([0-9a-zA-Z]\)\"/\1\'\'/g"
假设:开头的引号后面总是紧跟着一个字母或数字,结尾的引号前面是一个。引号可以跨越几个单词,甚至几个输入行(发生这种情况时,其他一些解决方案不起作用)
注意,我还替换了结束引号:根据您使用的字体,双引号可以被设置为中性的直接引号。您正在寻找包含在不包含引号的直接引号中的内容,因此最好的正则表达式是
“([^”]*?)”
。将其替换为`\1'
。在Perl中,这可以简化为s/”([^“]*?)“/`\1'/g
。我会非常小心地使用这种方法,它只在所有的开始引号都有匹配的结束引号时才起作用,例如在“一”二“三”四
中。但在“一”t“三”四
生成“一”t“三”“
如果您使用的是TeXmaker软件,您可以使用带有替换命令(CTRL+R)的正则表达式,并将以下内容放入“查找”字段中:
并进入替换字段:
然后按下“全部替换”按钮。但在那之后,你仍然需要检查一切是否正常,也许你需要做一些修正。这对我来说非常有效。我对你的方法有点困惑。如果使用
s/``/“[a-z]/g
,不是应该反过来吗?但是,我认为使用s/`(.*?“/”\1)/g会更好。Jerry转换是从“.”到“`.”。我认为有些人(包括我)感到困惑的原因是,在这个问题中,你没有使用内联代码格式(backticks)。在单间距字体中,很容易看到最后的“引号”实际上是两个撇号(”
),但我看到的只是“
”。在处理转义的“
或其他出现的”
时要小心,因为它们不是引号,例如在“引号”中,她“再次”不自然地说
。这些是派对上的扫兴者。
"([^}]*)"
``$1''