Regex 如何识别句子中不同前缀后最多两个世界
我知道这不是一个新问题,但我需要做一些预处理,并用REGEX生成一个模式,在一些前缀后面替换/查找名字/姓氏,例如Regex 如何识别句子中不同前缀后最多两个世界,regex,regex-group,Regex,Regex Group,我知道这不是一个新问题,但我需要做一些预处理,并用REGEX生成一个模式,在一些前缀后面替换/查找名字/姓氏,例如亲爱的John doe,,亲爱的John D,你好约翰,你好约翰先生,你好约翰,等等 假设每个句子中有1到2个单词(first name/first+last),可以在名称末尾包含逗号,但不必包含逗号 例如: Hi Mr John, we are planning to go out 或 应分别修改: Hi Mr @name, we are planning to go out
亲爱的John doe,
,亲爱的John D代码>,你好约翰
,你好约翰先生
,你好约翰
,等等
假设每个句子中有1到2个单词(first name/first+last),可以在名称末尾包含逗号,但不必包含逗号
例如:
Hi Mr John, we are planning to go out
或
应分别修改:
Hi Mr @name, we are planning to go out
或
到目前为止我已经试过了,但它不是正确的解决方案,它可以做得更好
((?i)Mr's|(?i)Mr|(?i)Hi|(?i)Dear)(/(\w+\s){1,}\w+[.?!]/)
关于您似乎可以使用
\b((?:\s*(?i:Mr(?:'s)?|Dear|Hi(?!,?\s*Mrs?\b)))+)\s+[A-Z]\w*(?:[\s-]+[A-Z]\w*)?
替换如下:
$1 @name
见
详细信息
\b
-单词边界
((?:\s*(?i:Mr(?:'s)|亲爱的|嗨(?,?\s*Mrs?\b))+
-第1组(称为替换模式中的$1
或\1
),匹配以下模式序列的一个或多个重复:
\s*
-0+空格
(?i:Mr(?:'s)|亲爱的|嗨(?,?\s*Mrs?\b))
-不区分大小写的修饰语组匹配:
Mr(?:)|
-Mr
然后是可选的子字符串,或
亲爱的|
-a亲爱的
子字符串或
Hi(?,?\s*Mrs?\b)
-Hi
后面不跟可选逗号、0+空格、Mr
或Mrs
作为整个单词
\s+
-1+空格
[A-Z]
-大写ASCII字母
\w*
-0+字字符(字母、数字、\u
,若要仅匹配ASCII字母,请改用[A-Za-z]*
)
(?:[\s-]+[A-Z]\w*)?
-一个可选的组,匹配1次或0次
[\s-]+
-1个或多个空格或-
[A-Z]\w*
-一个大写ASCII字母,然后是0+字字符
尝试(?i)\b(Mr(?:)s)|亲爱的|嗨(?,?\s*Mrs?\b))\s+\w+(?:\s+\w+)
并替换为$1@name
,请参见。可能三个捕获组是名称前的部分、名称后的部分。注意:我从未将“Mr's”作为标题。那不应该是太太或小姐吗?查看与“我们”匹配的@WiktorStribiżew@Wiktor Stribiżew,当然:)
\b((?:\s*(?i:Mr(?:'s)?|Dear|Hi(?!,?\s*Mrs?\b)))+)\s+[A-Z]\w*(?:[\s-]+[A-Z]\w*)?
$1 @name