Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 更改“";”乳胶样式的引号_Regex_Tex - Fatal编程技术网

Regex 更改“";”乳胶样式的引号

Regex 更改“";”乳胶样式的引号,regex,tex,Regex,Tex,我正在用LaTeX编辑一本书,它的引号语法不同于简单的“字符。因此我想将“此处引用的文本”转换为“此处引用的文本” 我有50个文本文件,里面有很多引文。我试图编写一个正则表达式,用`替换第一个“,然后用第二个“与”,但我失败了。我在网上搜索并询问了一些朋友,但我没有成功。最接近于替换第一个引号的是 s/“[a-z]/`/g 但这显然是错误的,因为 “此处引用的文本” 将成为 “`uoted text here” 如何解决我的问题?尝试将单词分组: sed 's/"\([a-z]\)/``\

我正在用LaTeX编辑一本书,它的引号语法不同于简单的
字符。因此我想将
“此处引用的文本”
转换为
“此处引用的文本”

我有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''