avatar
学术版求教一下# Joke - 肚皮舞运动
C*b
1
造成了楼下天花板受损。请问这种情况,怎么处理?
上网查了一下,好像我只需要负责我自己的损失?楼下的损失由楼下的保险公司负责。
有没有人有类似的经验?
多谢!
avatar
k*r
2
用word的replace功能能不能实现以下
把A换成B,同时保留所有“ ”之间的A为A?
avatar
y*n
3
是。楼下的楼下的保险公司负责。但保险公司如果不包的或没有保险公司的,你或你保
险公司负责。
avatar
H*g
4
可以
先替换' A '为[marker]
然后替换A为B
然后替换[marker]为' A '
avatar
k*r
5
我没讲清楚看来,要保留的A不是单纯的“A”,是“kjfdajf A fdkjfdkf”那种。
就是希望有个判定能识别A是引号中的,位置却是不定的.

【在 H********g 的大作中提到】
: 可以
: 先替换' A '为[marker]
: 然后替换A为B
: 然后替换[marker]为' A '

avatar
R*a
6
"A"的话,可以,"kfdafdjapas;"也要保留的话,很难,
就算让你写code话,估计至少也得7,8行code

【在 k***r 的大作中提到】
: 用word的replace功能能不能实现以下
: 把A换成B,同时保留所有“ ”之间的A为A?

avatar
l*k
7
先把所有A换成B,再把"xyz B ghi"换成"xyz A ghi"

【在 k***r 的大作中提到】
: 我没讲清楚看来,要保留的A不是单纯的“A”,是“kjfdajf A fdkjfdkf”那种。
: 就是希望有个判定能识别A是引号中的,位置却是不定的.

avatar
H*g
8
A旁边的这些字都确定吗?要保留的A旁边有什么特征?要替换的A旁边有什么特征?
只要A和紧邻的东西有特征就可以用上面那个代换的办法。如果A和附近的特征不紧邻那
就麻烦了。

【在 k***r 的大作中提到】
: 我没讲清楚看来,要保留的A不是单纯的“A”,是“kjfdajf A fdkjfdkf”那种。
: 就是希望有个判定能识别A是引号中的,位置却是不定的.

avatar
R*a
9
中文好办一点,“”是不一样的,英文""都一样,要加入
"John" is a "boy"的判断,就要麻烦多了。简单正则都搞不定

【在 k***r 的大作中提到】
: 我没讲清楚看来,要保留的A不是单纯的“A”,是“kjfdajf A fdkjfdkf”那种。
: 就是希望有个判定能识别A是引号中的,位置却是不定的.

avatar
k*r
10
继续澄清一下
在引号中的A位置多变,前后的xyz ghi啥的也不是一致的。

【在 l**k 的大作中提到】
: 先把所有A换成B,再把"xyz B ghi"换成"xyz A ghi"
avatar
H*g
12
唯一的标记就是双引号吗?

【在 k***r 的大作中提到】
: 继续澄清一下
: 在引号中的A位置多变,前后的xyz ghi啥的也不是一致的。

avatar
R*a
13
另外还有这种句式:
Heigh of Bo Dao is 5"3', but he has an 14"
这种情况""里面的a怎么算?

【在 R***a 的大作中提到】
: 中文好办一点,“”是不一样的,英文""都一样,要加入
: "John" is a "boy"的判断,就要麻烦多了。简单正则都搞不定

avatar
R*a
14
一段文字里许多个",哪两个"之间算,哪两个"不算,这不是简单一个正则能搞定的吧

【在 H********g 的大作中提到】
: word也可以搞正则表达式替换
: 叫做wild cards
: https://support.office.com/en-ca/article/Find-and-replace-text-by-using-
: regular-expressions-Advanced-eeaa03b0-e9f3-4921-b1e8-85b0ad1c427f

avatar
D*d
15
查引号的个数,regex +capture group?

【在 k***r 的大作中提到】
: 用word的replace功能能不能实现以下
: 把A换成B,同时保留所有“ ”之间的A为A?

avatar
H*g
16
那就先把所有的A都变成B,
然后用正则表达式把“(*)B(*)”里的B换回A

【在 H********g 的大作中提到】
: 唯一的标记就是双引号吗?
avatar
H*g
17
可以规定两个“”间有多长,比如搜索“[^A]{1,20}A[^A]{1,20}”

【在 R***a 的大作中提到】
: 一段文字里许多个",哪两个"之间算,哪两个"不算,这不是简单一个正则能搞定的吧
avatar
R*a
18
这种句式实际中太多了
"Bla bla bla bla", he said, "bla bla bla bla"

【在 H********g 的大作中提到】
: 可以规定两个“”间有多长,比如搜索“[^A]{1,20}A[^A]{1,20}”
avatar
H*g
19
反正只要可以用正则表达式,还能返回被找的东西,我觉得理论上总有办法。

【在 R***a 的大作中提到】
: 一段文字里许多个",哪两个"之间算,哪两个"不算,这不是简单一个正则能搞定的吧
avatar
H*g
20
他说的A不是bla的这个a吧,总得有点特征吧

【在 R***a 的大作中提到】
: 这种句式实际中太多了
: "Bla bla bla bla", he said, "bla bla bla bla"

avatar
R*a
21
blah的意思是中间内容你随便填。
但是这种句式就是你不能用引号之间距离判断是不是quote起来的内容

【在 H********g 的大作中提到】
: 他说的A不是bla的这个a吧,总得有点特征吧
avatar
l*k
22
我擦,word没这么智能,你肯定不能用replace all了,一个个来吧

【在 k***r 的大作中提到】
: 继续澄清一下
: 在引号中的A位置多变,前后的xyz ghi啥的也不是一致的。

avatar
H*g
23
word里<>这俩用来标记一个词的开头结尾,所以就算字符数字变化很大,词的数字总是
有限的,那就可以写成类似这样:
“( ){1,5}A( ){1,5}”
再说了,就算不能全找着,能把80%的找着不也解决问题了吗。

【在 R***a 的大作中提到】
: blah的意思是中间内容你随便填。
: 但是这种句式就是你不能用引号之间距离判断是不是quote起来的内容

avatar
R*a
24
对了,word这个怎么局部替换?
就算用正则表达式找到以后,不用宏,如何把里面的B替换成A,
而不是把整个"(*)B(*)"都替换成A了?

【在 H********g 的大作中提到】
: 那就先把所有的A都变成B,
: 然后用正则表达式把“(*)B(*)”里的B换回A

avatar
k*r
25
嗯,算了我直接一点吧。
就是个小说里的名字看得不爽,想把正文描述里的张老三换成博导,但是把所有对话里
的“张老三”换成“博妹”。对话里的张老三无处不在,唯一识别就是在引号中.

【在 H********g 的大作中提到】
: 唯一的标记就是双引号吗?
avatar
R*a
26
我说的那种句式就是""内词很多,很长,两段引言之间的反倒就俩词啊,你如何判断?

【在 H********g 的大作中提到】
: word里<>这俩用来标记一个词的开头结尾,所以就算字符数字变化很大,词的数字总是
: 有限的,那就可以写成类似这样:
: “( ){1,5}A( ){1,5}”
: 再说了,就算不能全找着,能把80%的找着不也解决问题了吗。

avatar
H*g
27
我正在研究,似乎跟perl一样,每个括号就是一个内部变量,返回成1 2...,也就是说
除了一次只能写一行以外跟perl差不了多少。所以我才觉得有戏。

【在 R***a 的大作中提到】
: 对了,word这个怎么局部替换?
: 就算用正则表达式找到以后,不用宏,如何把里面的B替换成A,
: 而不是把整个"(*)B(*)"都替换成A了?

avatar
H*g
28
那就是我说的办法。
中文还是英文?
中文的话,它用的引号规则吗,就是都是一左一右吗:“”

【在 k***r 的大作中提到】
: 嗯,算了我直接一点吧。
: 就是个小说里的名字看得不爽,想把正文描述里的张老三换成博导,但是把所有对话里
: 的“张老三”换成“博妹”。对话里的张老三无处不在,唯一识别就是在引号中.

avatar
k*r
29
中文的,左右引号好办吧,先都替换成 " 可以么?

【在 H********g 的大作中提到】
: 那就是我说的办法。
: 中文还是英文?
: 中文的话,它用的引号规则吗,就是都是一左一右吗:“”

avatar
R*a
30
中文好办一点,可以正则查找“”之间内容。假定没有漏掉一个引号的话。
ultraedit可以用宏,先把所有老三换成博导,然后正则搜“*博导*”,
并且把搜索结果选择出来,然后在selection里替换博导到博妹,
然后找下一个正则,repeat。
word用VBA应该也能做到,但是简单的搜索替换是很难的

【在 k***r 的大作中提到】
: 嗯,算了我直接一点吧。
: 就是个小说里的名字看得不爽,想把正文描述里的张老三换成博导,但是把所有对话里
: 的“张老三”换成“博妹”。对话里的张老三无处不在,唯一识别就是在引号中.

avatar
R*a
31
“”好办,""不好办

【在 k***r 的大作中提到】
: 中文的,左右引号好办吧,先都替换成 " 可以么?
avatar
k*r
32
左右引号还是有帮助的啊,我误解了,是中文的。

【在 R***a 的大作中提到】
: 中文好办一点,可以正则查找“”之间内容。假定没有漏掉一个引号的话。
: ultraedit可以用宏,先把所有老三换成博导,然后正则搜“*博导*”,
: 并且把搜索结果选择出来,然后在selection里替换博导到博妹,
: 然后找下一个正则,repeat。
: word用VBA应该也能做到,但是简单的搜索替换是很难的

avatar
R*a
33
其实dos命令倒是认,
ren a* b*,只会把第一个字母改了,但是这些编辑器里替换内容就不行了

【在 H********g 的大作中提到】
: 我正在研究,似乎跟perl一样,每个括号就是一个内部变量,返回成1 2...,也就是说
: 除了一次只能写一行以外跟perl差不了多少。所以我才觉得有戏。

avatar
H*g
34
试验:
原文
就是个小说里的名字看得不爽,想把正文描述里的张老三换成博导,但是把所有对话里
是在引号中.
替换结果:
就是个小说里的名字看得不爽,想把正文描述里的张老三换成博导,但是把所有对话里
在引号中.
查找:
“(*)张老三(*)”
替换为:
“\1博美\2”
唯一的缺憾是左引号换了方向
avatar
H*g
35
就俩词,放不下张老三,那就更好了,根本不用管它。

【在 R***a 的大作中提到】
: 我说的那种句式就是""内词很多,很长,两段引言之间的反倒就俩词啊,你如何判断?
avatar
H*g
36
两个大波波中间夹一个张老某,外面还有两撮腋毛
“(*)张老三(*)”
avatar
R*a
37
"我是张老三,我来自东北,我们家乡有高粱和大米,[以下删去一百字]",张老三自豪
的说,“张老三我在东北老出名了,[以下删去四百字]"

【在 H********g 的大作中提到】
: 就俩词,放不下张老三,那就更好了,根本不用管它。
avatar
H*g
38
word今天给我一惊喜。没想到它还有这高级功能。
avatar
k*r
39
谢谢了,我回去试试。

【在 H********g 的大作中提到】
: 试验:
: 原文
: 就是个小说里的名字看得不爽,想把正文描述里的张老三换成博导,但是把所有对话里
: 是在引号中.
: 替换结果:
: 就是个小说里的名字看得不爽,想把正文描述里的张老三换成博导,但是把所有对话里
: 在引号中.
: 查找:
: “(*)张老三(*)”
: 替换为:

avatar
H*g
40
这种情况就只可能假设中文里不会有人把引号单独拿出来用一次了,靠奇偶识别。
或者就不用replace all,人眼睛盯着替换。

【在 R***a 的大作中提到】
: "我是张老三,我来自东北,我们家乡有高粱和大米,[以下删去一百字]",张老三自豪
: 的说,“张老三我在东北老出名了,[以下删去四百字]"

avatar
R*a
41
英文比较麻烦啊,有14"的问题

【在 H********g 的大作中提到】
: 这种情况就只可能假设中文里不会有人把引号单独拿出来用一次了,靠奇偶识别。
: 或者就不用replace all,人眼睛盯着替换。

avatar
R*a
42
另外,奇偶识别不是正则就能搞定的吧

【在 H********g 的大作中提到】
: 这种情况就只可能假设中文里不会有人把引号单独拿出来用一次了,靠奇偶识别。
: 或者就不用replace all,人眼睛盯着替换。

avatar
H*g
43
光一句好像的确不行,得两句正则表达式
所以可以用两次替换来实现,第一次替换把所有的双引号替换成有方向的L" 和R"标记
,然后第二次用这俩有方向的标记来找引号中间的东西。

【在 R***a 的大作中提到】
: 另外,奇偶识别不是正则就能搞定的吧
avatar
H*g
44
那就引号前面不许是数字,只许是A-z

【在 R***a 的大作中提到】
: 英文比较麻烦啊,有14"的问题
avatar
R*a
45
博导还会16进制怎么办?0x0E"

【在 H********g 的大作中提到】
: 那就引号前面不许是数字,只许是A-z
avatar
R*a
46
另外,"I'm 35",这句话就废了

【在 H********g 的大作中提到】
: 那就引号前面不许是数字,只许是A-z
avatar
H*g
47
正常文章里后面的“前面都是句号问号感叹号,所以还是可以分辨的。

【在 R***a 的大作中提到】
: 另外,"I'm 35",这句话就废了
avatar
H*g
48
如果是工程文档那的确不能随便用正则表达式。里面什么怪东西都有。

【在 R***a 的大作中提到】
: 博导还会16进制怎么办?0x0E"
avatar
D*d
49
I wrote some java code, might be ugly, but it works...
package Testing;
public class TestReplaceWithQuotes {
public static String replaceInsideQuotes(String source, char quote,
String target, String replacement){
StringBuilder regex = new StringBuilder();
StringBuilder replace = new StringBuilder();

String quoteChar = Character.isDigit(quote) || Character.
isAlphabetic(quote) ? String.valueOf(quote) : ("\" + quote);
String nonQuoteChar = "[^" + quoteChar + "]";

// System.out.println(quoteChar);
// System.out.println(nonQuoteChar);

regex.append("(");
regex.append("^");
regex.append(nonQuoteChar + "*");
regex.append("(" + quoteChar + nonQuoteChar + "*" + quoteChar +
nonQuoteChar + "*" + ")" + "*?");
regex.append(quoteChar + nonQuoteChar + "*");
regex.append(")");
regex.append("(");
regex.append(target);
regex.append(")");
regex.append("(");
regex.append(".*");
regex.append("$");
regex.append(")");

// System.out.println(regex.toString());

// Pattern pattern = Pattern.compile(regex.toString());
// Matcher matcher = pattern.matcher(source);
//
// if(matcher.matches()){
// for(int i = 0; i <= matcher.groupCount(); i++){
// System.out.println(String.valueOf(i) + ": " + matcher.
group(i));
// }
// }

replace.append("$1");
replace.append(replacement);
replace.append("$4");

// System.out.println(replace.toString());

String from = regex.toString();
String to = replace.toString();

String oldString = source;
String newString = "";

while(true){
newString = oldString.replaceAll(from, to);
if(oldString.equals(newString)){
break;
}else{
oldString = newString;
}
}
return oldString;
}

public static String replaceOutsideQuotes(String source, char quote,
String target, String replacement){
StringBuilder regex = new StringBuilder();
StringBuilder replace = new StringBuilder();

String quoteChar = Character.isDigit(quote) || Character.
isAlphabetic(quote) ? String.valueOf(quote) : ("\" + quote);
String nonQuoteChar = "[^" + quoteChar + "]";

regex.append("(");
regex.append("^");
regex.append(nonQuoteChar + "*");
regex.append("(" + quoteChar + nonQuoteChar + "*" + quoteChar +
nonQuoteChar + "*" + ")" + "*?");
regex.append(nonQuoteChar + "*");
regex.append(")");
regex.append("(");
regex.append(target);
regex.append(")");
regex.append("(");
regex.append(".*");
regex.append("$");
regex.append(")");

replace.append("$1");
replace.append(replacement);
replace.append("$4");

String from = regex.toString();
String to = replace.toString();

String oldString = source;
String newString = "";

while(true){
newString = oldString.replaceAll(from, to);
if(oldString.equals(newString)){
break;
}else{
oldString = newString;
}
}
return oldString;
}

public static void main(String[] args){
String source = ""我是张老三,我来自东北,我们家乡有高粱和大米,[以
下删去一百字]",张老三自豪的说,"张老三我在东北老出名了,[以下删去四百字]",
张老三又自豪的说.";
String target = "张老三";
String replacementIn = "博导";
String replacementOut = "博妹";

System.out.println(source);
String result = source;
result = replaceInsideQuotes(result, '"', target, replacementIn);
result = replaceOutsideQuotes(result, '"', target, replacementOut);
System.out.println(result);
}
}
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。