Java 正则表达式不';t火柴

Java 正则表达式不';t火柴,java,regex,text-processing,Java,Regex,Text Processing,在这种情况下,我对regexp有问题: 我需要从这种结构中提取(并替换)所有点: any_symbols->white_space->x.(or xx. or Xx. or xX. or xy. or yy. etc.)->white_space->any_symbol_not_upper_case_and_not_a_digit 比如说 1990 x. abcd - extract dot ffff xx.abcd - extract dot 1990 x

在这种情况下,我对regexp有问题: 我需要从这种结构中提取(并替换)所有点:

any_symbols->white_space->x.(or xx. or Xx. or xX. or xy. or yy. etc.)->white_space->any_symbol_not_upper_case_and_not_a_digit
比如说

1990 x. abcd  -  extract dot

ffff xx.abcd  -  extract dot

1990 x. Abcdef    -  do not extract

abcd x. Abcd      -  do not extract

abcd x. 1990      -  do not extract
所以我构建了这样的regexp:

(?<=\s[XxYy]{1,2})\.(?>=\s+?[^\p{javaUpperCase}\d])
(?=\s+?[^\p{javaUpperCase}\d])
但它不匹配。那怎么了

谢谢

p.S.

之后

String skipPtrn="(?<=\\s[РрГг]{1,2})\\.(?>=\\s+?[^\\p{javaUpperCase}\\d])";
originalText=originalText.replaceAll(skipPtrn, " ");
String skipPtrn=“(?=\\s+?[^\\p{javaUpperCase}\\d])”;
originalText=originalText.replaceAll(skipPtrn,“”);
我还在文本中找到:

1673年。зззззззззззз

ª1623ª。ччз

1925年。(“аiааimk_”


等等。

尝试从前瞻组中删除
符号:
(?x)
(原子组)或
(?=x)
(零宽度正前瞻),但不要
(?>=x)


还要注意的是,第二个示例与您的描述不匹配,并且与上面的正则表达式不匹配。

完全不需要向前看:

$ perl -wne 's/^(\w+\s+[XxYy]{1,2})\.(\s*[^A-Z\d]+)$/$1$2/;print' <data.txt 
1990 x abcd
ffff xxabcd
1990 x. Abcdef
abcd x. Abcd
abcd x. 1990

$perl-wne's/^(\w+\s+[XxYy]{1,2})\(\s*[^A-Z\d]+)$/$1$2/;print'根据您的描述,空格不是可选的。根据您的示例,它们是可选的。什么是正确的?您的正则表达式与您的任何示例都不匹配还是全部匹配?当前面的符号为:空格和[XxYy]{1,2}时,提取点,在点符号之后是:(空格和非大写字母符号和非数字)我补充了主要问题+1的内容,以指出这一点。人们不知何故沉迷于通过“向前看/向后看”使事情复杂化,无论是否需要。