我有一个包含“font-family”的动态文本,例如:
style="font-family: "Calibri","sans-serif"; font-size:11pt";
我想删除所有font-family元素。
我正在使用此代码
patron = Pattern.compile("font-family:(.*?);");
encaja = patron.matcher(cadena);
nueva = encaja.replaceAll("");
但它以对我无用的方式移除:
style="Calibri","sans-serif"; font-size: 11pt;"
我想要的是:
style=" font-size: 11pt;"
我也尝试过使用这种模式
font-family:[^(&.*;)]*?;
但它不起作用。
你能帮助我吗?
由于
修改
更多案例:
in: style="font-size:15px; font-family:Arial; mso-ascii-theme-font: minor-latin; "
output: style="font-size:15px; mso-ascii-theme-font: minor-latin;"
in: style="font-family:Arial,Aás;; font-size:11pt; mso-fareast-mso-fareast-theme-font: minor-latin;"
output:style="font-size:11pt; mso-fareast-mso-fareast-theme-font: minor-latin;"
答案 0 :(得分:2)
您可以使用:
String result = yourstr.replaceAll("(?i)font-family:(?>[^;&\"]++|&(?>quot|ntilde);)*(?>;\\s*+|(?=\"))", "");
模式描述:
(?i) # make the pattern case-insensitive
font-family:
(?> # open an atomic group
[^;&\"]++ # all characters except ; & and " one or more times (possessive)
| # OR
& # literal &
(?> # put the different possibilities here
quot
|
ntilde
)
; # literal ;
)* # repeat the atomic group zero or more times
(?>
;\\s*+ # literal ; and trailing spaces
|
(?=\") # followed by " (last value of the attribute without trailing ; )
)
另一种但不那么安全的方式(IMO):跳过&
和;
之间的所有字母:
String result = yourstr.replaceAll("(?i)font-family:(?>[^;&\"]++|&[a-z]++;)*(?>;\\s*+|(?=\"))", "");
答案 1 :(得分:1)
试试这个:
newstr = str.replaceFirst("font-family:\s?([^\s]+)", "");